首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GridView在屏幕上适配,但不适合HDPI和XHDPI

GridView在屏幕上适配,但不适合HDPI和XHDPI
EN

Stack Overflow用户
提问于 2013-03-05 15:53:04
回答 2查看 868关注 0票数 0

网格视图图像不适合hdpi和xhdpi。它适合于mdpi模拟器和device.My图像大小在以下(它遵循3:4:6:8的比例)。

ldpi 366*225 mdpi 488*300 //适合于模拟器和设备屏幕hdpi 732*450 Xhdpi 976*600

第一张图片(MDPI)在屏幕上合适,第二张图像(XHDPI和HDPI一样)不合适?

MenuActivity:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<?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>

mdpi的Logcat输出:(模拟器-7“WSVGA-tablet-1024*600:mdpi)

日志输出XHDPI:(模拟器-GalaxyNexus-4.65“-720*1280:xhdpi)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-21 01:46:25

我为MDPI解析设计了位图(因为MDPI中有1 px=1 dp )。然后使用calculator/转换为其他解析桶

修改以下代码:

更改如下:

代码语言:javascript
复制
                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 :

代码语言:javascript
复制
            float dpHeight = outMetrics.heightPixels;
            float dpWidth  = outMetrics.widthPixels;
票数 0
EN

Stack Overflow用户

发布于 2013-03-06 04:13:38

嗨,您是否为不同的屏幕大小创建了分隔文件夹,如果不是这样创建的话

布局-小型

布局-大型

布局-xlarge

然后将布局XML文件复制到这些文件夹中,并检查Xhdpi调色板窗口中的预览,默认屏幕大小为10“,以便调整布局中的Grid视图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15228252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档