【Android】gravityとlayout_gravityの使い方と違い
- 作成日:2022/01/27
gravityとlayout_gravity属性について解説します。
gravityとは
gravityはviewの内部の位置を指定するandroidの属性です。 ボタンなどのviewに設定する場合と、LinearLayoutなどのレイアウトに設定する場合を解説します。
viewに設定
テキストビューやボタンなどのviewにgravity属性を設定したら、テキストの位置を左右、中央寄せにしたりできます。
設定値 | 解説 | サンプル |
---|---|---|
right | 右寄せ | |
left | 左寄せ | |
center | 中央寄せ | |
center_vertical | 縦の中央せ | |
center_horizontal | 横の中央せ |
gravity属性はviewの内側の位置を指定するので、テキスト文字の位置が変更されます。
では、サンプルコードを紹介します。例えば、ボタンのテキストを右寄せにする場合は次のようにします。16行目で右寄せの設定をしています。
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/btn"
android:layout_width="300dp"
android:layout_height="100dp"
android:text="ボタン"
android:textSize="30sp"
android:backgroundTint="#696969"
android:gravity="right"
/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
レイアウトに設定
gravity属性はレイアウトにも設定できます。 例えば、LinearLayoutの内部にボタンが1つある場合、LinearLayoutにgravity属性を使えば、ボタンの位置を指定できます。
以下はLinearLayout(黄色)にgravity属性を設定した場合の結果です。 内部のボタンの位置が変わってるのがわかります。
設定値 | 解説 | サンプル |
---|---|---|
right | 右寄せ | |
left | 左寄せ | |
center | 中央寄せ | |
center_vertical | 縦の中央せ | |
center_horizontal | 横の中央せ |
サンプルコードを紹介します。15行目で中央寄せの設定をしています。
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="300dp"
android:layout_height="300dp"
android:background="#f0e68c"
android:orientation="vertical"
android:gravity="center">
<Button
android:id="@+id/btn"
android:layout_width="200dp"
android:layout_height="100dp"
android:backgroundTint="#696969"
android:text="ボタン"
android:textSize="30sp" />
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
このように、内部の位置を指定したい場合はgravity属性を活用しましょう。
layout_gravityとは
layout_gravityは親要素に対するviewの位置を指定できるandroidの属性です。 こちらの属性もボタンやレイアウトなどに設定可能です。
viewに設定
テキストビューやボタンなどのviewにlayout_gravity属性を設定したら、viewの位置を左右、中央寄せにできます。
以下は親要素が黄色の場合、ボタンにlayout_gravity属性を設定した結果です。
設定値 | 解説 | サンプル |
---|---|---|
right | 右寄せ | |
left | 左寄せ | |
center | 中央寄せ |
親要素がLinearLayoutの場合、orientation属性をvertical(縦並び)かhorizontal(横並び)によって結果が変わります。 この例は縦並びの例です。
サンプルコードを紹介します。24行目でボタンに中央寄せの設定をしています。
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="300dp"
android:background="#f0e68c"
android:orientation="vertical"
>
<Button
android:id="@+id/btn"
android:layout_width="200dp"
android:layout_height="100dp"
android:backgroundTint="#696969"
android:text="ボタン"
android:textSize="30sp"
android:layout_gravity="center"
/>
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
レイアウトに設定
layout_gravity属性はレイアウトにも設定できます。
以下はLinearLayout(黄色)にlayout_gravity属性を設定した場合の結果です。 layout_gravity自体の位置が変わっていることがわかります。
設定値 | 解説 | サンプル |
---|---|---|
right | 右寄せ | |
left | 左寄せ | |
center | 中央寄せ | |
center_vertical | 縦の中央せ | |
center_horizontal | 横の中央せ |
サンプルコードを紹介します。15行目でLinearLayoutに左寄せの設定をしています。
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="300dp"
android:layout_height="300dp"
android:background="#f0e68c"
android:orientation="vertical"
android:layout_gravity="left"
>
<Button
android:id="@+id/btn"
android:layout_width="200dp"
android:layout_height="100dp"
android:backgroundTint="#696969"
android:text="ボタン"
android:textSize="30sp"
/>
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
このように、親要素に対する自分自身の位置を指定したい場合はlayout_gravity属性を使います。
gravityとlayout_gravityの違い
gravity属性はviewの内部の位置を指定するのに対して、layout_gravity属性はview自体の位置を指定できます。 どちらの属性もボタンやレイアウトなどに設定できます。
どちらを使うのかはケースバイケースです。例えば、LinearLayoutの中にボタンが3つあるとして、中の3つのボタンの位置をまとめて指定したい場合は、 LinearLayoutにgravity属性を設定するのが簡単です。
一方で、3つのボタンのうち、1つは右寄せ、1つは左寄せ・・・など個々に位置を指定したい場合は、ボタンに対してlayout_gravity属性を設定するのが良いでしょう。