アプリケーションでプログラム的にGridviewの高さを設定したい。
それを実装する方法はありますか?
コードから特定の2つのケースでグリッドビューの高さを変更したいだけです。
編集:
<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が入力されるFragmentを拡張します。
<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)getView().findViewById( R.id.mygridview_container);
gridAdapter = new MyCustomAdapter(context, list);
gridView.setAdapter(gridAdapter);
ビューが作成されるたびに、グリッドビューのアイテム数を確認し、それに応じて高さを設定する必要があります。
GridviewにlayoutParams()を設定しようとすると、この例外が発生しました。
Android.view.InflateException: Binary XML file line #89: Error inflating class fragment
行89は、フラグメントclass = "com.myapp.Android.MyGridViewClass"のこの行に対応します
現在の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()
);
}
私はこれがうまくいくと思います:
GridView gridView = (GridView)findViewById(...);
ViewGroup.LayoutParams lp=new ViewGroup.LayoutParams(width,height);
gridView.setLayoutParams(lp);