Android gridview行高根据显示

时间:2015-05-21 14:52:47

标签: android gridview row

抱歉我的英语。 一个简单的问题(如果你知道答案:-D): 我有一个只有图像的GridView,所有图像都是相同的大小。我已经在xml中设置了colums的数量。这是代码:

<GridView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/grid_view_bambini14"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:numColumns="@integer/grid_columns" <!-- grid_colums value is set in res/values, in case the display is landscape or portrait-->
        android:horizontalSpacing="10sp"
        android:verticalSpacing="10sp"
        android:gravity="center"
        android:stretchMode="columnWidth" >

这是java代码:

Public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) {
        imageView = new ImageView(mContext);
        imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
        imageView.setLayoutParams(new GridView.LayoutParams(GridView.AUTO_FIT , 260));
    } else {
        imageView = (ImageView) convertView;
    }
    imageView.setImageResource(mThumbIds[position]);
    return imageView;
}

问题是行高。在某些智能手机中,图像以正确的方式显示,在其他情况下(我认为根据显示器的分辨率和密度)行太高。 我试图改变这一行

imageView.setLayoutParams(new GridView.LayoutParams(GridView.AUTO_FIT , 260));

使用不同的值而不是260,因此要放置GridView.AUTO_FIT,但结果始终是淫秽的。 我该如何解决? 谢谢!

2 个答案:

答案 0 :(得分:0)

为什么高度在各种设备上出现不同的一个可能的问题是你在这里指定高度的方式:

imageView.setLayoutParams(new GridView.LayoutParams(GridView.AUTO_FIT, 260));

问题的一个很好的起点是使用密度像素:

imageView.setLayoutParams(new GridView.LayoutParams(GridView.AUTO_FIT, context.getResources().getDimension(R.dimen.grid_view_item_height)));

在资源中指定grid_view_item_height:

<dimen name="grid_view_item_height">100dp</dimen>

答案 1 :(得分:0)

相反:

  

context.getResources()。getDimension(R.dimen.grid_view_item_height)

试试这个:

  

context.getResources()。getDimensionPixelSize(R.dimen.grid_view_item_height)

因为,在dimen.xml中它的 dp(float)。因此,使用getDimensionPixelSize而不是getDimension。它工作正常。 KUDOS#