Androidgridview行高根据显示

Android gridview row height according to the display

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

<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,但结果总是令人讨厌。 我该如何解决? 谢谢!

为什么高度在各种设备上显示不同的一个可能问题是您在此处指定高度的方式:

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>

改为:

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

试试这个:

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

因为,在 dimen.xml 中它在 dp(浮动) 中。因此,使用 getDimensionPixelSize 而不是 getDimension。它工作正常。荣誉#