GridView适合MDPI屏幕但不适合HDPI和XHDPI
问题描述:
Grid View图像不适合hdpi和xhdpi。它适合mdpi仿真器和设备。我的图像大小低于(它按照3:4:6:8的比例)。GridView适合MDPI屏幕但不适合HDPI和XHDPI
LDPI 366 * 225 MDPI 488 * 300 //它正确贴合仿真器和设备屏幕 HDPI上732 * 450 Xhdpi 976 * 600
第一图片(MDPI)配合在屏幕上适当地,第二图像( XHDPI与HDPI相同)不适合?
MenuActivity:
GridView gridView = (GridView) findViewById(R.id.gridview);
gridView.setAdapter(new ImageAdapter(this));
gridView.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_MOVE){
return true;
}
return false;
}
});
gridView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
gridView.setVerticalScrollBarEnabled(false);
ImageAdapter.java:
public class ImageAdapter extends BaseAdapter {
private Context mcontext;
public ImageAdapter(Context c) {
mcontext=c;
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView ;
if(convertView==null)
{
imageView = new ImageView(mcontext);
//imageView.inflate(mcontext, R.layout.mainmenu_griditem,null);
ImageView.inflate(mcontext, R.layout.mainmenu_griditem,null);
WindowManager wm = (WindowManager) mcontext.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);
float density = mcontext.getResources().getDisplayMetrics().density;
Log.i("image","density->"+density);
float dpHeight = outMetrics.heightPixels/density;
Log.i("image","dpHeight->"+dpHeight);
float dpWidth = outMetrics.widthPixels/density;
Log.i("image","dpWidth->"+dpWidth);
int width=(int) (dpWidth/2);
int height=(int) (dpHeight/2.3);
Log.i("image","Image Width->"+width);
Log.i("image","Image height->"+height);
//int width=(int) (dpWidth);
//int height=(int) (dpHeight);
//imageView.setLayoutParams(new GridView.LayoutParams(width,height));
imageView.setLayoutParams(new GridView.LayoutParams(width,height));
//imageView.setLayoutParams(new GridView.LayoutParams(parent.getWidth()/2,parent.getHeight()/2));
//imageView.setLayoutParams(new GridView.LayoutParams(imageView.getWidth(),imageView.getHeight()));
//imageView.setBackgroundColor(000000);
//imageView.setLayoutParams(new GridView.LayoutParams(400,200));
//imageView.setLayoutParams(new GridView.LayoutParams());
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
//imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
//imageView.setPadding(40,40,40,40);
}
else
{
imageView=(ImageView)convertView;
}
imageView.setImageResource(mThumbIds[position]);
return imageView;
}
// references to our images
private Integer[] mThumbIds = {
R.drawable.mainmenu1, R.drawable.mainmenu2,
R.drawable.mainmenu3, R.drawable.mainmenu4
};
}
我尝试了很多,但没有帮助。
mainmenugriditem.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView android:id="@+id/mm_grid_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<TextView android:id="@+id/mm_grid_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:labelFor="@id/mm_grid_image"/>
</RelativeLayout>
logcat的输出,用于MDPI:(仿真器-7" WSVGA片剂-1024 * 600:MDPI)
logcat的XHDPI输出:(仿真器 - Galaxy Nexus-4.65“-720 * 1280:xhdpi)
答
我设计了MDPI分辨率的位图(因为在MDPI中1 px = 1 dp)。然后,使用转换成其他分辨率桶http://labs.skinkers.com/content/android_dp_px_calculator/
修改下面的代码:
更改此:
Log.i("image","density->"+density);
float dpHeight = outMetrics.heightPixels/density;
Log.i("image","dpHeight->"+dpHeight);
float dpWidth = outMetrics.widthPixels/density;
Log.i("image","dpWidth->"+dpWidth);
TO:
float dpHeight = outMetrics.heightPixels;
float dpWidth = outMetrics.widthPixels;
答
嗨具有创建分开的文件夹不同的屏幕尺寸,如果没有这样的
布局小
布局大型
布局,XLARGE创建
然后,您将布局XML文件复制到这些文件夹中,并检查Palette窗口中Xhdpi的预览,默认屏幕大小为10“,以便您可以在布局中调整网格视图。
能否请您发表你当你注销mdpi和xhdpi的宽度和高度?我想仔细检查xhdpi值是否为double mdpi。 – 2013-03-05 16:23:34
更新我的问题与logcat输出为mdpi和xhdpi以及我的mainmenugriditem.xml文件。 – Ramprasad 2013-03-06 02:50:14
另外我有疑问,基于四种分辨率(ldpi.mdpi,hdpi,xhdpi)或屏幕尺寸的设计图像? – Ramprasad 2013-03-06 02:53:24