【问题标题】:Center children in a GridView在 GridView 中居中子项
【发布时间】:2011-02-07 16:08:31
【问题描述】:

我有一个 3 列 GridView 和 4 个项目。

所以碰巧其中三个出现在第一行,最后一个出现在第二行,但这个是靠左对齐的。我只是想知道是否有可能让它出现在GridView 的中心。就像一个'T',我不知道我是否解释... xD

谢谢你:-)

编辑:

这是包含GridView的布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/section_title_root"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:background="@drawable/bg_gd_home_grid">
    <ImageView
    android:src="@drawable/home_grid_txori"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:layout_marginTop="40dip"
    android:layout_centerHorizontal="true"/>
    <GridView
        android:id="@+id/home_grid"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:numColumns="3"
        android:drawSelectorOnTop="true"
        android:layout_marginBottom="30dip"
        android:layout_marginLeft="30dip"
        android:layout_marginRight="30dip"
        android:padding="5dip"
        android:listSelector="@android:color/transparent"
        android:background="@drawable/bg_home_grid_item"
/>
</RelativeLayout>

顺便说一句,android:layout_centerHorizontal="true" 在 GridView 中不起作用

解决方案编辑:

这个问题是几年前的问题,但我被要求发布解决方案,我必须找到我的旧仓库才能得到它:-)

正如我在 cmets 中所说的那样,我无法仅使用 XML 来实现它,所以我不得不在第三位欺骗一个假的不可点击 + 不可聚焦的项目。

这是我的第一个应用程序,所以我没有实施推荐的“ViewHolder”解决方案。我强烈推荐它的用法

这就是我的 getView() 方法在适配器中的样子:

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

        if (convertView == null) {

            convertView = (RelativeLayout) mInflater.inflate(
                    R.layout.home_grid_item, null);

        }

        /* In order to have 4th item centered in the 2nd row, we create an empty 3rd item */
        if (position == 3) {
            convertView.setFocusable(false);
            convertView.setClickable(false);
        } else {
            ImageView imageView = (ImageView) convertView
                    .findViewById(R.id.image);
            imageView.setImageResource(mThumbs[position]);
            TextView textView = (TextView) convertView.findViewById(R.id.title);
            textView.setText(mTitles[position]);

        }

        convertView.setTag(mTabTags[position]);

        return convertView;
    }

【问题讨论】:

    标签: android gridview


    【解决方案1】:

    你可以试试下面的代码:

    android:gravity="center_horizontal"
    

    在xml中。

    【讨论】:

    • 不可能通过 xml 参数来做到这一点,所以最后我玩弄脏了,当我的适配器中的 position==3 时,我创建了一个空的不可点击+不可聚焦的项目。它工作正常:-)
    • 实际上,我想要的是将单个项目集中在网格视图的单元格中,但是您的回答使我走上了正确的轨道(在我用于项目的布局上设置重力.
    • @Wakka。你能在这里分享你的代码吗?我还想根据项目的数量动态地实现相同的布局。谢谢..
    • @YuDroid Done :-) 这是我的第一个应用程序,所以你也应该使用 ViewHolder 算法!
    【解决方案2】:

    这就是我解决这个问题的方法。 当我确切知道该列时,我会动态设置 numcolumn。

        <GridView
            android:id="@+id/gr_single"
            android:verticalSpacing="@dimen/pay_mode_icon_margin"
            android:horizontalSpacing="@dimen/pay_mode_icon_margin"
            android:columnWidth="@dimen/pay_icon_width"
            android:gravity="center"
            android:stretchMode="columnWidth"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    

    在java中。

    mGridView.setNumColumns(mSingleImageViews.size());
    mGridView.setAdapter(new ImageAdapter());
    

    【讨论】:

      猜你喜欢
      • 2017-09-10
      • 2020-01-17
      • 2012-08-08
      • 1970-01-01
      • 2016-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多