如何以编程方式设置gridview的高度

时间:2012-12-20 14:27:25

标签: android android-layout gridview

我想在我的应用程序中以编程方式设置 Gridview 的高度。

有没有办法实现呢?

我只想从代码中更改两个特定情况下的gridview高度。

修改

<fragment
     android:id="@+id/mygridview"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:layout_margin="10dip"
     class="com.myapp.android.MyGridViewClass" />

MyGridViewClass扩展Fragment,填充Gridview。

 <GridView
    android:id="@+id/mygridview_container"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="5dip"
    android:columnWidth="90dp"
    android:gravity="center_vertical|center_horizontal"
    android:horizontalSpacing="1dp"
    android:numColumns="3"
    android:scrollbars="vertical"
    android:stretchMode="spacingWidthUniform"
    android:verticalSpacing="5dp" />

在myGridViewClass onViewCreated中,我使用代码对gridview进行了充气,​​

gridView = (GridView)getView().findViewById( R.id.mygridview_container);
gridAdapter = new MyCustomAdapter(context, list);
gridView.setAdapter(gridAdapter);   

每当创建视图时,我都必须检查gridview中的项目数并相应地设置高度。

当我尝试为gridview设置layoutParams()时,我遇到了这个异常。

android.view.InflateException: Binary XML file line #89: Error inflating class fragment

其中第89行对应于片段中的这一行     class =“com.myapp.android.MyGridViewClass”

2 个答案:

答案 0 :(得分:29)

使用此功能,因为您希望保留当前的layoutParams

ViewGroup.LayoutParams layoutParams = yourGridview.getLayoutParams();
layoutParams.height = 50; //this is in pixels
yourGridview.setLayoutParams(layoutParams);

修改:如果您想将高度输入为dp而不是像素,请将dp金额转换为像素:

public static int convertDpToPixels(float dp, Context context){
    Resources resources = context.getResources();
    return (int) TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP,
            dp, 
            resources.getDisplayMetrics()
    );
}

答案 1 :(得分:3)

我认为这应该有效:

GridView gridView = (GridView)findViewById(...);
ViewGroup.LayoutParams lp=new ViewGroup.LayoutParams(width,height);
gridView.setLayoutParams(lp);