2016-10-09 10 views
0

私は2x2の単純なグリッドレイアウトを持っています。 3人は赤、緑、青の景色があります。グリッドのセルの中心に揃えるようにします。私のレイアウトは以下の通りですが、layout_gravityをすべてのビューに対して中央として配置しても、ビューは左上に配置されます。どうすればこの問題を解決できますか?GridLayoutセンターのグリッドセルでビューを揃える方法は?

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.elyeproj.griddrag.MainActivity"> 

    <GridLayout 
     android:id="@+id/container_grid" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:columnCount="2" 
     android:rowCount="2" 
     android:orientation="horizontal"> 
     <View 
      android:id="@+id/view_red" 
      android:layout_height="100dp" 
      android:layout_width="100dp" 
      android:layout_gravity="center" 
      android:background="#ff0000" /> 

     <View 
      android:id="@+id/view_green" 
      android:layout_height="100dp" 
      android:layout_width="100dp" 
      android:layout_gravity="center" 
      android:background="#00ff00" /> 

     <View 
      android:id="@+id/view_blue" 
      android:layout_height="100dp" 
      android:layout_width="100dp" 
      android:layout_gravity="center" 
      android:background="#0000ff" /> 
    </GridLayout> 
</RelativeLayout> 

答えて

1

グリッドレイアウトの項目は折り返しているので、必要に応じて適切に整列させるためにウェイトを使用することをお勧めします。 XML以下 は何をしたいです:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_main" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 

<GridLayout 
    android:id="@+id/container_grid" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:columnCount="2" 
    android:rowCount="3" 
    android:orientation="horizontal"> 

    <View 
     android:id="@+id/view_red" 
     android:layout_height="100dp" 
     android:layout_width="100dp" 
     android:layout_columnWeight="1" 
     android:layout_rowWeight="1" 
     android:layout_gravity="center" 
     android:background="#ff0000" 
     android:layout_row="0" 
     android:layout_column="0" /> 

    <View 
     android:id="@+id/view_green" 
     android:layout_height="100dp" 
     android:layout_width="100dp" 
     android:layout_columnWeight="1" 
     android:layout_gravity="center" 
     android:background="#00ff00" 
     android:layout_row="0" 
     android:layout_column="1" /> 

    <View 
     android:id="@+id/view_blue" 
     android:layout_height="100dp" 
     android:layout_width="100dp" 
     android:layout_columnWeight="1" 
     android:layout_rowWeight="1" 
     android:layout_gravity="center" 
     android:background="#0000ff" 
     android:layout_row="1" 
     android:layout_column="0" /> 
    </GridLayout> 
</RelativeLayout> 

は21以下のAPI用のLinearLayoutを使用して別の解決策については、以下のリンクを参照してください。 GridLayout (not GridView) how to stretch all children evenly

+0

素晴らしい!残念ながら、それはAPI21でのみ動作します:(。以前のバージョンをサポートしたい場合はどうすればいいですか? – Elye

+0

はい、下位APIの場合は、Javaコードで行う必要があります。GridLayoutのサイズを計算してから、 )を使用するのではなく;)有用であれば回答を受け入れる –

+0

21の下のより良い解決方法については、このページを参照してください:http://stackoverflow.com/questions/10016343/gridlayout-not-gridview-how-to-stretch-all -children-evenly –

1

ちょっとだけ、それぞれのビューにこれらの行を追加します。

android:layout_columnWeight="1" 
android:layout_rowWeight="1" 

これが役に立ちます。

+0

素晴らしい!残念ながら、API21のみで動作します:(。以前のバージョンに対応したい場合はどうすればいいですか? – Elye

+0

API19デバイスでこれを実行して、動作しているかどうかを確認してください。 – Harv

関連する問題