web-dev-qa-db-ja.com

GridViewの中心要素

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"
/>
29
bimbol

グリッドビューのアイテムを中央に配置するために私がしたことは次のとおりです(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>

理解するのに少し時間がかかりましたが、それらの異なる値をいじって、それらを中心に置くことができました。

52
Ray Hunter

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>
13

次の属性を設定する必要があります。

Android:stretchMode="columnWidth"

...そして...

Android:gravity="center"
8
homelink

よく、カスタムアダプタを使用してグリッドビュー内の単一の行ビューを膨らませている場合は、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>
5
ankit purwar

Gridviewアダプターを以下から更新したときに問題が発生しました:

        gridView = inflater.inflate(R.layout.mobile, null);

        gridView = inflater.inflate(R.layout.mobile, parent, false);

そのため、古い(null)バージョンが失敗した場合は、try catchを使用して元に戻しました。

1
John Ashmore

これがあなたの問題を解決することを願っています:

  <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>
0
Hamad Al-Absi

私の答えは次のとおりです。

<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>

paddinghorizontalSpacingを使用しないでください。他のビューで問題が発生する可能性があるため、必要ない場合は使用しないでください。

fill_parentはすでに廃止されています。

0
piotrek1543

これを変更してみてください:
Android:layout_height="fill_parent"

Android:layout_height="wrap_content"

これで、グリッドビューに親の高さと幅を完全に埋めるように指示しました。

0
svidnas

gridlayoutheightwidthラップコンテンツがあるだけであることがわかりました。

Android:layout_centerHorizontal="true"

必要なサイズに合わせて中央に配置されますが、親と一致している場合。技術的には、子を相殺する多くの親の空きスペースをベースにしています。

0
Chris