2013-03-05 80 views
0

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

回答

0

我設計了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; 
0

嗨具有創建分開的文件夾不同的屏幕尺寸,如果沒有這樣的

佈局小

佈局大型

佈局,XLARGE創建

然後,您將佈局XML文件複製到這些文件夾中,並檢查Palette窗口中Xhdpi的預覽,默認屏幕大小爲10「,以便您可以在佈局中調整網格視圖。