我希望在每个网格中拉伸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
之外还有更好的方法来实现它,那么请提出建议。
这就是我得到的
任何帮助将不胜感激。提前谢谢!
答案 0 :(得分:4)
使用GridLayout
和layout_columnWeight
属性,您可以使用layout_rowWeight
而不是GridView
来实现此目的。 API级别14中添加了GridLayout
,但在API级别21之前未添加这些属性。但您可以使用GridLayout
以及layout_columnWeight
和layout_rowWeight
使用v7 GridLayout Support Library:
compile 'com.android.support:gridlayout-v7:25.0.1'
然后,您要做的就是确保GridLayout
中的每个单元格都相等layout_columnWeight
和layout_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>
这是我得到的结果:
答案 1 :(得分:1)
重新列出Bryan's nice solution中描述的网格要点的核对表:
添加编译指令
compile 'com.android.support:gridlayout-v7:25.3.1'
将布局更新为android.support.v7.widget.GridLayout
设置app:columnCount="2"
使用以下项设置每个网格元素:
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>