【问题标题】:Stretch GridView to fit full screen拉伸 GridView 以适应全屏
【发布时间】:2016-11-16 13:13:14
【问题描述】:

我想拉伸我的GridView,它在每个网格内包含一个ImageView 和一个TextView,以覆盖手机的整个屏幕。

我已经尝试了很多在线提供的解决方案,但没有一个对我有用。我已经尝试过的一些答案是:

How can I force a GridView to use the whole screen (regardless of display size)?

android How to stretch rows in the gridview to fill screen?

这是我的代码:

activity_layout.xml

<FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/gaming">
    <GridView
        android:id="@+id/categoryGridView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:verticalSpacing="1dp"
        android:horizontalSpacing="1dp"
        android:background="@android:color/transparent"
        android:numColumns="2"
        android:stretchMode="columnWidth"
        android:layout_weight="1" />
</FrameLayout>

category_grid_single.xml

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativelayout"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageView
    android:id="@+id/gridImageView"
    android:layout_width="60dip"
    android:layout_height="60dip"
    android:scaleType="centerCrop"
    android:gravity="center"
    android:layout_centerInParent="true"
    android:layout_margin="1dp"/>
<TextView
    android:id="@+id/gridImageViewText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/gridImageView"
    android:layout_margin="5dp"
    android:gravity="center"
    android:textSize="20sp"
    android:textStyle="bold"
    android:layout_centerHorizontal="true"
    android:textColor="@color/colorWhite" />
</RelativeLayout>

CustomAdapter.java

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    View grid;
    if (convertView == null) {

        LayoutInflater inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        grid = inflater.inflate(R.layout.main_category_grid_single, null);
        grid.setMinimumHeight(mheight/3);//mheight is the Height of the screen

    } else {
        grid = convertView;
    }
    TextView textView = (TextView) grid.findViewById(R.id.gridImageViewText);
    ImageView imageView = (ImageView)grid.findViewById(R.id.gridImageView);
    textView.setText(category[position]);
    imageView.setImageResource(ImageId[position]);
    return grid;
}

我正在尝试实现类似于下图的GridView。但目前在设置我的GridView 之后,我在底部得到了空白空间。如果除了GridView 之外还有其他更好的方法来实现它,那么也请提出建议。

这就是我得到的

任何帮助将不胜感激。提前致谢!

【问题讨论】:

  • 为你的文本视图做 android:layout_width="match_parent" 如果这不起作用给权重为 1 并查看
  • @Redman,我没工作。结果相同。
  • 你能把你如何得到它的截图保留下来吗?
  • @JuLes,我已经试过了。没用。

标签: android android-gridview


【解决方案1】:

您可以使用GridLayout 而不是GridView,通过使用layout_columnWeightlayout_rowWeight 属性来实现此目的。 GridLayout 在 API 级别 14 中添加,但这些属性直到 API 级别 21 才添加。但是您可以使用 GridLayout 以及 layout_columnWeightlayout_rowWeight 属性返回到 API 级别 7 使用v7 GridLayout Support Library:

compile 'com.android.support:gridlayout-v7:25.0.1'

然后,您所要做的就是确保GridLayout 中的每个单元格具有相等的layout_columnWeightlayout_rowWeight

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout android:id="@+id/app_bar"
        android:layout_width="match_parent" android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar android:id="@+id/toolbar"
            android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"
            app:popupTheme="@style/AppTheme.PopupOverlay"/>

    </android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.GridLayout
        android:id="@+id/recycler"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:columnCount="2"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <FrameLayout
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            android:background="@color/black_alpha_26">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center"
                android:text="YouTube"/>

        </FrameLayout>

        <FrameLayout
            app:layout_columnWeight="1"
            app:layout_rowWeight="1">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center"
                android:text="Videos"/>

        </FrameLayout>

        <FrameLayout
            app:layout_columnWeight="1"
            app:layout_rowWeight="1">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center"
                android:text="VR Apps"/>

        </FrameLayout>

        <FrameLayout
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            android:background="@color/black_alpha_26">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center"
                android:text="VR Movies"/>

        </FrameLayout>

        <FrameLayout
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            android:background="@color/black_alpha_26">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center"
                android:text="VR Games"/>

        </FrameLayout>

        <FrameLayout
            app:layout_columnWeight="1"
            app:layout_rowWeight="1">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center"
                android:text="Shop"/>

        </FrameLayout>

    </android.support.v7.widget.GridLayout>

</android.support.design.widget.CoordinatorLayout>

这是我得到的结果:

【讨论】:

    【解决方案2】:

    回顾Bryan's nice solution中描述的网格要点的清单:

    1. 添加编译指令

      • 目前正在使用: compile 'com.android.support:gridlayout-v7:25.3.1'
    2. 将布局更新为android.support.v7.widget.GridLayout

      • 注意这里,我一开始错过了这个,犯了一个错误,省略了完整的包名
    3. 设置app:columnCount="2"

    4. 设置每个网格元素:

      app:layout_columnWeight="1" 
      app:layout_rowWeight="1"
      

    演示 xml:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v7.widget.GridLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:columnCount="2"
        app:rowCount="2"
        app:orientation="horizontal"
        >
    
        <TextView
            android:id="@+id/m1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_gravity="center"
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            android:text="m1"/>
    
    
        <TextView
            android:id="@+id/m2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_gravity="center"
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            android:text="m2"/>
    
    
        <TextView
            android:id="@+id/m3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_gravity="center"
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            android:text="m3"/>
    
    
        <TextView
            android:id="@+id/m4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_gravity="center"
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            android:text="m4"/>
    
    
    </android.support.v7.widget.GridLayout>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 2015-07-20
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多