设置固定GridView行高

Ale*_*IIP 13 android android-gridview

我在GridView中遇到行高的各种问题.

我想用XML设置项目的大小(高度/宽度)然后让GridView自动调整尽可能多的没有拉伸.如果它不适合下一个元素,它应该只在它能够适应的当前元素数量周围添加填充.

目前我得到2列(对我来说几乎看起来固定大小)并且行被拉伸.有人可以帮助解释发生了什么以及如何实现我想要的东西吗?

网格视图:

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/main_grid"
    android:numColumns="auto_fit"
    android:gravity="center"
    android:paddingRight="20dp"
    android:paddingLeft="20dp"
    android:clipToPadding="true"
    android:fitsSystemWindows="true"
    android:stretchMode="none"
    android:background="@drawable/main_grid_background">

</GridView>
Run Code Online (Sandbox Code Playgroud)

GridItem(我想要它320x320,因为我后来插入一个背景图像,如果它不是一个完美的正方形,看起来很奇怪).

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="320dp"
    android:layout_height="320dp"
    android:padding="10dp" >

    <TextView
        android:id="@+id/grid_item_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:text="@+id/label"
        android:layout_marginTop="5dp"
        android:textColor="@color/black"
        android:textSize="15sp"
        android:visibility="invisible"
        android:layout_centerInParent="true" >
    </TextView>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

Java的:

public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View gridView;

        if (convertView == null) {

            gridView = new View(context);

            // get layout from mobile.xml
            gridView = inflater.inflate(R.layout.main_grid_item, null);

        } else {
            gridView = (View) convertView;
        }
        TextView textView = (TextView) gridView
                .findViewById(R.id.grid_item_label);

            //SET TEXT AND BACKGROUND IMAGE HERE
            //gridView.setBackgroundResource(R.drawable.main_grid_item_import);



        return gridView;
    }
Run Code Online (Sandbox Code Playgroud)

Bor*_*off 49

在CustomAdapter中

v.setLayoutParams(new GridView.LayoutParams(GridView.AUTO_FIT, rowHigh));
Run Code Online (Sandbox Code Playgroud)

rowHigh是您必须更改的维度


Ale*_*IIP 5

所以,这不是一个完美的答案,但这就是我让它工作的方式。从这个线程借用的想法。

所有这些都假设我知道我的图像尺寸,即 320x320。另外,在 GridView 中我必须设置android:columnWidth="320dp"否则它不起作用。如果有人有更好的想法,请张贴...现在我继续前进。

网格项 XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="10dp" >
    <ImageView
    android:id="@+id/grid_item_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"/>
    <TextView
        android:id="@+id/grid_item_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:text="@+id/label"
        android:textColor="@color/black"
        android:layout_alignLeft="@+id/grid_item_image"
        android:layout_alignTop="@+id/grid_item_image"
        android:layout_alignRight="@+id/grid_item_image"
        android:layout_alignBottom="@+id/grid_item_image"
        android:gravity="center"
        android:textSize="15sp"
        android:visibility="invisible">
    </TextView>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

网格视图 XML:

<GridView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/main_grid"
    android:numColumns="auto_fit"
    android:gravity="center"
    android:columnWidth="320dp"
    android:paddingRight="20dp"
    android:paddingLeft="20dp"
    android:clipToPadding="true"
    android:fitsSystemWindows="true"
    android:stretchMode="columnWidth"
    android:background="@drawable/main_grid_background">
</GridView>
Run Code Online (Sandbox Code Playgroud)