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相同)不适合?

MDPI

XHDPI

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-MDPI

logcat的XHDPI输出:(仿真器 - Galaxy Nexus-4.65“-720 * 1280:xhdpi)

Logcat-XHDPI

+0

能否请您发表你当你注销mdpi和xhdpi的宽度和高度?我想仔细检查xhdpi值是否为double mdpi。 – 2013-03-05 16:23:34

+0

更新我的问题与logcat输出为mdpi和xhdpi以及我的mainmenugriditem.xml文件。 – Ramprasad 2013-03-06 02:50:14

+0

另外我有疑问,基于四种分辨率(ldpi.mdpi,hdpi,xhdpi)或屏幕尺寸的设计图像? – Ramprasad 2013-03-06 02:53:24

我设计了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“,以便您可以在布局中调整网格视图。