开发者

Android-GridView Padding problem

开发者 https://www.devze.com 2023-02-24 23:23 出处:网络
Im working on a app where im loading an image into the GridView... My problem now is when im using the imageView.setPadding(10,10,10,10) its working fine for HTC Hero but in case of Motorola Droid th

Im working on a app where im loading an image into the GridView... My problem now is when im using the imageView.setPadding(10,10,10,10) its working fine for HTC Hero but in case of Motorola Droid they are overlapping each other... How to make the padding to be common for all mobile... Here is my code..

package com.android.sampleDesign1;
import android.content.Context;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;

public class TicTacToeAdapter extends BaseAdapter {

public ImageView imageView;

private Context mContext;
private Integer mThumbIds = R.drawable.images;    

private Integer image;

public TicTacToeAdapter(Context c) {
    mContext = c;

}

public int getCount() {
    return 9;
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}



public View getView(int position, View convertView, ViewGroup parent) {    
    image = mThumbIds;  

    if (convertView == null) {
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setImageResource(image);             
        imageView.setPadding(10,10,10,10);          

     } else {
        imageView = (ImageView) convertView;           
        imageView.setImageResource(image);          
    }               
    return imageView;
  }   

}   

I have also tried to use the

int w = gridView.getWidth(); int myViewWidth = Math.round(W * .12f);

and also i tried with the

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PAREN开发者_开发百科T);

lp.setMargins(left, top, right, bottom);

imageView.setLayoutParams(lp);

So is there anyother way to do.. Or am i wrong anywhere.. Help me out..

Thanks in advance.


Rather defining the padding in pixels, you need to define it in dips (density independent pixels) and then convert the dips to pixels at run time.

So you would need to do something similar to

private static final float PADDING_IN_DP = 10.0f; // 1 dip = 1 pixel on an MDPI device
private final int mPaddingInPixels;

public TicTacToeAdapter(Context context) {
    ....
    // Convert the dps to pixels
    final float scale = context.getResources().getDisplayMetrics().density;
    mPaddingInPixels = (int) (PADDING_IN_DP * scale + 0.5f);
}

...
public View getView(int position, View convertView, ViewGroup parent) { 
    ...
    if (convertView == null) {
        ...
        imageView.setPadding(mPaddingInPixels, mPaddingInPixels, mPaddingInPixels, mPaddingInPixels);
    }
    ...
}
...

The scale you get in your constructor will differ depending on the density of the screen of the device your app is running on.

(Note: dip and dp are the same thing)

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号