Как установить высоту 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"
Ответы
Ответ 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);