GridViewには2列に6つの画像があります。この6つの画像を画面の中央に表示したいです。重力のプロパティを中央に設定しますが、この中央の要素は水平方向のみです。 GridViewは画面全体を使用します。
<GridView
Android:id="@+id/gridview"
Android:layout_above="@id/ad" Android:layout_alignParentTop="true"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:numColumns="2"
Android:verticalSpacing="10dp"
Android:horizontalSpacing="10dp"
Android:stretchMode="columnWidth"
Android:background="#ffffff"
Android:gravity="center"
/>
グリッドビューのアイテムを中央に配置するために私がしたことは次のとおりです(stretchmode、columnwidth、gravity、水平および垂直間隔に注意してください)。
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="horizontal"
Android:padding="5dp" >
<GridView
Android:id="@+id/gridview"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:columnWidth="100dp"
Android:gravity="center"
Android:horizontalSpacing="10dp"
Android:numColumns="3"
Android:stretchMode="spacingWidthUniform"
Android:verticalSpacing="10dp" />
</LinearLayout>
理解するのに少し時間がかかりましたが、それらの異なる値をいじって、それらを中心に置くことができました。
GridViewを子要素が中央に配置されたLinearLayoutでラップして、gridviewのlayout_heightを「wrap_content」に変更してみてください。例:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_height="fill_parent"
Android:layout_width="fill_parent"
Android:gravity="center"
Android:layout_gravity="center">
<GridView
Android:id="@+id/homeGridView"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:numColumns="3"
Android:verticalSpacing="10dp"
Android:horizontalSpacing="10dp"
Android:stretchMode="columnWidth"
Android:gravity="center" />
</LinearLayout>
次の属性を設定する必要があります。
Android:stretchMode="columnWidth"
...そして...
Android:gravity="center"
よく、カスタムアダプタを使用してグリッドビュー内の単一の行ビューを膨らませている場合は、single_rowのレイアウトにAndroid:gravity = "center"を追加してみてください。 :)すなわち、
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:gravity="center"
Android:orientation="vertical" >
<ImageView
Android:id="@+id/ivClrBlock"
Android:layout_width="88dp"
Android:layout_height="88dp"
Android:layout_marginBottom="5dp"
Android:layout_marginTop="5dp"
/>
<TextView
Android:id="@+id/tvClrName"
Android:layout_width="88dp"
Android:layout_height="wrap_content"
Android:layout_marginBottom="5dp"
Android:layout_marginTop="5dp"
Android:gravity="center"
Android:text="@string/color_name"
Android:textSize="15sp" />
</LinearLayout>
Gridviewアダプターを以下から更新したときに問題が発生しました:
gridView = inflater.inflate(R.layout.mobile, null);
に
gridView = inflater.inflate(R.layout.mobile, parent, false);
そのため、古い(null)バージョンが失敗した場合は、try catchを使用して元に戻しました。
これがあなたの問題を解決することを願っています:
<LinearLayout
Android:layout_gravity="center_horizontal"
Android:gravity="center"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="horizontal" >
<GridLayout
Android:id="@+id/gridlayou4x3"
Android:rowCount="4"
Android:columnCount="3"
Android:orientation="horizontal"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_weight="80"
Android:minWidth="25px"
Android:minHeight="25px" />
</LinearLayout>
私の答えは次のとおりです。
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@id/linearLayout"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="horizontal">
<GridView
Android:id="@+id/gridView"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:columnWidth="100dip"
Android:gravity="center"
Android:numColumns="3"
Android:stretchMode="spacingWidthUniform"
Android:verticalSpacing="10dip" />
</LinearLayout>
padding
やhorizontalSpacing
を使用しないでください。他のビューで問題が発生する可能性があるため、必要ない場合は使用しないでください。
fill_parent
はすでに廃止されています。
これを変更してみてください:Android:layout_height="fill_parent"
にAndroid:layout_height="wrap_content"
これで、グリッドビューに親の高さと幅を完全に埋めるように指示しました。
gridlayout
とheight
にwidth
ラップコンテンツがあるだけであることがわかりました。
Android:layout_centerHorizontal="true"
必要なサイズに合わせて中央に配置されますが、親と一致している場合。技術的には、子を相殺する多くの親の空きスペースをベースにしています。