我正在尝试在对话框中显示GridView。尽管我付出了很多努力,GridView的宽度也会增长到整个屏幕,而不是包裹到列中。下面是布局和描述问题的图像(我为GridView设置了背景颜色来说明问题)。
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/colorgridview"
android:background="#FF00CCBB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numColumns="4"
android:verticalSpacing="5dp"
android:horizontalSpacing="5dp"
android:columnWidth="70dp"
android:stretchMode="none"
/>
答案 0 :(得分:1)
我知道这篇文章有点过时了。但如果有人需要解决方案,这个答案可能会派上用场。
可以在屏幕测量后设置视图的宽度。
要做到这一点:
让您的类实现OnGlobalLayoutListener。 调用onGlobalLayout方法时会测量屏幕。我们可以在这里做我们的魔力。 GridView.getLayoutParams()。width = ....
编辑: 我不太清楚如何添加onGlobalLayoutListener。看看plugmind的帖子,他展示了如何添加它。 Can't figure out how to get view/layout width/height
亲切的问候, BRAM
答案 1 :(得分:0)
我认为您应该使用android:layout_width="fill_parent"
而不是android:layout_width="wrap_content"
,因为换行内容会使用它所需的最小位置。另一方面,fill_parent使用所需的所有空间。你应该摆脱"android:columnWidth="70dp".
答案 2 :(得分:0)
当然可以设置固定的layout_width(以dp为单位)。由于您的列数也已修复,这可能是一种解决方法吗?
答案 3 :(得分:0)
有同样的问题...... 我用覆盖的onMeasure()
解决了这个问题public class GridViewEx extends GridView {
private int mRequestedNumColumns = 0;
public GridViewEx(Context context) {
super(context);
}
public GridViewEx(Context context, AttributeSet attrs) {
super(context, attrs);
}
public GridViewEx(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void setNumColumns(int numColumns) {
super.setNumColumns(numColumns);
if (numColumns != mRequestedNumColumns) {
mRequestedNumColumns = numColumns;
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (mRequestedNumColumns > 0) {
int width = (mRequestedNumColumns * getColumnWidth())
+ ((mRequestedNumColumns-1) * getHorizontalSpacing())
+ getListPaddingLeft() + getListPaddingRight();
setMeasuredDimension(width, getMeasuredHeight());
}
}
}