Подтвердить что ты не робот

Как установить высоту gridview программно андроида

Я хочу установить высоту моего Gridview программно в моем приложении.

Есть ли способ реализовать это?

Я просто хочу изменить высоту сетки в двух отдельных случаях из кода.

EDIT:

<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 расширяет фрагмент, где заполняется 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 и соответственно устанавливать высоту.

Когда я попытался установить layoutParams() для gridview, я получил это исключение.

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

Если строка 89 соответствует этой строке во фрагменте    class= "com.myapp.android.MyGridViewClass"

4b9b3361

Ответ 1

Используйте это, так как вы хотите сохранить текущий 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()
    );
}

Ответ 2

Я думаю, что это должно сработать:

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