我正在使用按钮动态加载gridview。所以我正在使用scrollview,但如果我将wrap_content指定为gridview的高度,则不会显示所有按钮。我不想为gridview指定任何静态高度。 这是我正在使用的代码:
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:paddingLeft="5dip"
android:paddingRight="5dip" >
<GridView
android:id="@+id/gridviewtable"
android:layout_width="fill_parent"
android:layout_height=wrap_content"
android:horizontalSpacing="10dp"
android:numColumns="4"
android:verticalSpacing="10dp" >
</GridView>
</LinearLayout>
</ScrollView>
答案 0 :(得分:4)
您需要创建一个新类,例如
public class WrappingGridView extends GridView {
public WrappingGridView(Context context) {
super(context);
}
public WrappingGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public WrappingGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int heightSpec = heightMeasureSpec;
if (getLayoutParams().height == LayoutParams.WRAP_CONTENT) {
// The great Android "hackatlon", the love, the magic.
// The two leftmost bits in the height measure spec have
// a special meaning, hence we can't use them to describe height.
heightSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
}
super.onMeasure(widthMeasureSpec, heightSpec);
}
}
您还需要更改XML
<com.your.project.WrappingGridView
android:id="@+id/gridviewtable"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:horizontalSpacing="10dp"
android:numColumns="4"
android:verticalSpacing="10dp"/>
最后在您的java类中,您需要将对象GridView转换为WrappingGridView
答案 1 :(得分:2)
试试这个
int totalHeight = (count / <number of items in a row>);
if (count % <number of items in a row> != 0) {
totalHeight++;
}
ViewGroup.LayoutParams params = gridview.getLayoutParams();
params.height = <height of a row> * totalHeight;
gridview.setLayoutParams(params);
gridview.requestLayout();
答案 2 :(得分:0)
android:layout_height="wrap_content"
不能用于AdapterView
的子类(例如ListView和GridView)。 GridView必须获得每行的高度才能计算出自己的高度。
删除ScrollView
和LinearLayout
,您不需要它们。 GridView已经内置了自己的滚动逻辑。
答案 3 :(得分:0)
这或类似的东西应该这样做。 (我记得的代码)
myImageView.setLayoutParams(new ImageView.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, (LinearLayout.LayoutParams.WRAP_CONTENT));
答案 4 :(得分:0)
这是弗兰肯斯坦在我面前的许多答案,但到目前为止,它是唯一对我有用的东西:
private static void resizeGridView(GridView gridView, int rows) {
int measuredHeight = gridView.getMeasuredHeight();
ViewGroup.LayoutParams params = gridView.getLayoutParams();
params.height = measuredHeight * rows;
gridView.setLayoutParams(params);
gridView.requestLayout();
}
在您更新要显示到gridView的内容后调用此方法。