Android:如何强制 GridView 宽度为 wrap_content?

标签 android

我的 GridView 包含固定宽度的列,具有固定的水平间距。如果没有足够的列来水平填充屏幕,我希望 GridView 的宽度环绕其内容,并在屏幕中垂直居中。

但是,无论我使用多少列,GridView 的宽度都会增长以填满屏幕。所附图片显示了这一点,其中绿色 GridView 水平填充屏幕,尽管只有 3 列且其宽度设置为“wrap_content”。

public class Temp extends Activity
{
    private GridView grid;
    private int columnWidth = 80;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        View view = getLayoutInflater().inflate(R.layout.gridview, null);
        grid = (GridView) view.findViewById(R.id.grid);
        grid.setColumnWidth(columnWidth);
        grid.setAdapter(new GridAdapter());

        setContentView(view);
    }

    class GridAdapter extends BaseAdapter 
    {
        public GridAdapter() 
        {
        }

        public int getCount() 
        {
            return 3;
        }

        public Object getItem(int position) 
        {
            return null;
        }

        public long getItemId(int position) 
        {
            return position;
        }

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

            if (convertView == null) 
            {
                ret = new ImageView(Temp.this);
                ret.setLayoutParams(new GridView.LayoutParams(columnWidth, 100));
                ret.setBackgroundColor(Color.WHITE);
            }
            else
            {   
                ret= convertView;
            }

            return ret;
        }
    }
}




<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="#FF0000"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <GridView 
        android:id="@+id/grid"
        android:background="#00FF00"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:numColumns="auto_fit"
        android:verticalSpacing="2dip"
        android:horizontalSpacing="2dip"
        android:stretchMode="columnWidth"
        android:gravity="center">
    </GridView>
</RelativeLayout>

enter image description here

最佳答案

GridView 至少可以说这种东西非常烦人。在你的情况下,问题是说 auto_fit 本质上是告诉 GridView 不幸的是总是水平地适应它。您可以尝试将行中的各个 ImageView 居中。但这需要您更改设置方式。不是让列自动适应,而是每行只有 1 个项目,但膨胀一个方向为水平的 LinearLayout。然后将线性布局与每一行中的 ImageView 居中。希望这能提供一些想法。

关于Android:如何强制 GridView 宽度为 wrap_content?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11870077/

相关文章:

android - Turbolinks - 如何在单击表单按钮时打开原生相机/图库

android - 我想在 ListView 中检测哪个 onFling 事件的 ListItem

android - 将目标 sdk 从 22 更新为 26 后出现 Resource Not Found 异常

android - 如何通过dataBinding访问fragment中activity的父 View

android - 构建 Android 内核时出错 : "multiple target patterns"

java - 致命异常 : java. lang.IllegalStateException - 无法为 LinearLayout 创建图层(仅在 Galaxy j4+、j6+ 中崩溃)

android - 如何从横向到横向检测屏幕旋转 180 度?

android - 在 Android Studio 中添加 Assets 文件夹

Android FloatingActionButton 快速拨号

java - 使用改造发送带有一些参数的多部分(文件)