忍者ブログ
  • 2025.01
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 2025.03
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2025/02/24 01:37 】 |
GridLayout
GridLayout
方眼でオブジェクトを並べるレイアウト。iOSでいうとコレクションビュー。




<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relative"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.layoutmaster.MainActivity" >

<GridLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="88dp"
android:layout_marginTop="83dp"
android:columnCount="3"
android:orientation="vertical"
android:rowCount="3"
android:rowOrderPreserved="true" >

<ImageView
android:id="@+id/imageView1"
android:layout_gravity="left"
android:src="@drawable/ic_launcher" />

<ImageView
android:id="@+id/imageView2"
android:layout_gravity="left"
android:src="@drawable/ic_launcher" />

<ImageView
android:id="@+id/imageView3"
android:layout_gravity="left"
android:src="@drawable/ic_launcher" />

<ImageView
android:id="@+id/imageView4"
android:layout_gravity="left"
android:src="@drawable/ic_launcher" />

</GridLayout>

</RelativeLayout>













GridLayout

リファレンス

columnCount
列数。intで指定。必須ではない。
指定しないと、自動で拡張される。
指定した場合、各グリッドのlayout_columnにcolumnCount以上の値を指定するとエラーになる。ただし、指定をせずにグリッドを追加していくぶんには、上限を超えて追加されていくようだ。
rowCount
も同様。
android:columnCount="3"
android:rowCount="3"

orientation
縦に追加していくか、横に追加していくかを指定する。horizontalかverticalを指定。デフォルトはhorizontal。
android:orientation="vertical"



<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relative"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.layoutmaster.MainActivity" >

<GridLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="88dp"
android:layout_marginTop="83dp"
android:orientation="vertical"
android:columnCount="3"
android:rowCount="3"
android:rowOrderPreserved="true" >

<ImageView
android:id="@+id/imageView1"
android:layout_gravity="left"
android:src="@drawable/ic_launcher" />

<ImageView
android:id="@+id/imageView2"
android:layout_gravity="left"
android:src="@drawable/ic_launcher" />

<ImageView
android:id="@+id/imageView3"
android:layout_gravity="left"
android:src="@drawable/ic_launcher" />

<ImageView
android:id="@+id/imageView4"
android:layout_gravity="left"
android:layout_row="0"
android:src="@drawable/ic_launcher" />

</GridLayout>

</RelativeLayout>











useDefaultMargins
グリッド同士のマージンをデフォルト値で作る。デフォルトはfalse。
使ってみると、少し隙間ができる。




rowOrderPreserved
columnOrderPreserved
trueかfalseでセットする。違いがよくわからん。

orientation="horizontal"のときにrowOrderPreserved="false"にすると、グリッドが表示されなくなった。
orientation="vertical"のときにcolumnOrderPreserved="false"でも同様。


Grid自体に境界線を出す機能はないようだ。
だが、中身のビューのbackground属性を使うことで実現できる場合があるらしい。
参考

GridLayout.LayoutParams

layout_column
layout_row
指定した行・列に配置。
GridLayoutにcolumnCountやrowCountを設定していた場合、それと同じかそれより大きい数字をセットするとエラーになる。


layout_columnSpan
layout_rowSpan
複数行・複数列にまたがるグリッドを作る。
android:layout_columnSpan="2"
必要なら、layout_gravityをcenterとかfillとかに。



<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relative"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.layoutmaster.MainActivity" >

<GridLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="88dp"
android:layout_marginTop="83dp"
android:orientation="vertical"
android:columnCount="3"
android:rowCount="3"
android:alignmentMode="alignMargins"
android:useDefaultMargins="true"
android:rowOrderPreserved="true" >

<ImageView
android:id="@+id/imageView1"
android:layout_columnSpan="2" ここ!!!!!!!!
android:layout_gravity="fill" この指定も一緒にするとよさそう
android:src="@drawable/ic_launcher" />

<ImageView
android:id="@+id/imageView2"
android:layout_gravity="left"
android:src="@drawable/ic_launcher" />

<ImageView
android:id="@+id/imageView3"
android:layout_gravity="left"
android:src="@drawable/ic_launcher" />

<ImageView
android:id="@+id/imageView4"
android:layout_gravity="left"
android:src="@drawable/ic_launcher" />

</GridLayout>

</RelativeLayout>










layout_gravity
グリッド内の配置位置指定。いつもと同じ


layout_margin
GridLayout固有では別に無いが、指定するとグリッド内にマージンを付けられる。
android:layout_margin="15dp"

分かりやすくするために、全部のグリッドに以下の設定をしている。
android:background="#0ff"



<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relative"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.layoutmaster.MainActivity" >

<GridLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="88dp"
android:layout_marginTop="83dp"
android:orientation="vertical"
android:columnCount="3"
android:rowCount="3"
android:alignmentMode="alignMargins"
android:useDefaultMargins="false"
android:rowOrderPreserved="true" >

<ImageView
android:id="@+id/imageView1"
android:layout_gravity="fill"
android:layout_columnSpan="2"
android:background="#0ff"
android:src="@drawable/ic_launcher" />

<ImageView
android:id="@+id/imageView2"
android:layout_gravity="fill"
android:layout_margin="30dp" ここ!!!!!!!!!!!
android:background="#0ff"
android:src="@drawable/ic_launcher" />

<ImageView
android:id="@+id/imageView3"
android:layout_gravity="fill"
android:background="#0ff"
android:src="@drawable/ic_launcher" />

<ImageView
android:id="@+id/imageView4"
android:layout_gravity="fill"
android:background="#0ff"
android:src="@drawable/ic_launcher" />

</GridLayout>

</RelativeLayout>







この状態で、
android:useDefaultMargins="true"
とするとこうなる。

グリッド間にマージンが付いたのが分かる。

この状態でさらに
android:alignmentMode="alignBounds"
とするとこうなる。


alignMargins(デフォルト)だと、各グリッドは自身のマージン設定に応じて配置される。(マージン値優先で配置)
alignBoundsだと、縦横のグリッドのオブジェクトの位置が揃うようにマージンが調整される。(オブジェクトの境界優先で配置)

layout_marginを使用しないとこの違いが出てこないようだ。
元々のサイズの違う画像とか、違う形のオブジェクトとかを置いても、マージンの指定をしていなければ、どちらの指定でも変わらなかった。

alignMargins でも alignBounds でもこの状態。

PR
【2014/08/29 16:30 】 | Android | 有り難いご意見(0)
<<ScrollView | ホーム | TableLayout>>
有り難いご意見
貴重なご意見の投稿














<<前ページ | ホーム | 次ページ>>