アプリのテキストやボタンの間隔を調整したい事があると思います。間隔調整には、padding:Viewのbackgroundの大きさの中での距離、margin: View間の距離
の2つがあります。
2024.1.1
padding and margin
レイアウトで良く出てくるpaddingとmarginですがどのような意味があるか実際の画像にして確認しみましょう。
尚、ここでは LinearLayout でのテストなので注意です
padding
Viewのbackgroundの中での距離
実際の使いかたとして、例えば TextView での表示は
android:paddingTop=”40dp”
とすると TextView の背景を含めた大きさの中でのTopから文字までの距離となります。
dpとはスクリーン上での抽象的な長さのことです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<!-- Bottomから20dp --> android:paddingBottom="20dp" <!-- Leftから40dp --> android:paddingStart="40dp" <!-- Rightから20dp --> android:paddingEnd="20dp" <!-- Topから40dp --> android:paddingTop="40dp" <!-- 上下左右 20dp --> android:padding="20dp" |
activity_main.xmlに以下のように記述してみると
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main" android:orientation="vertical" android:gravity="center" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <!-- 0. padding 設定なし --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#008000" android:text="@string/textview" android:textSize="30sp" android:textColor="#ffffff" /> <!-- 1. padding を上下左右それぞれに設定 --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#ffa080" android:paddingBottom="20dp" android:paddingStart="40dp" android:paddingEnd="20dp" android:paddingTop="40dp" android:text="@string/pd1" android:textSize="30sp" /> <!-- 2. padding 一括設定 --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#a080ff" android:padding="20dp" android:text="@string/pd2" android:textSize="30sp" /> <!-- 3. button padding 設定 --> <Button android:text="@string/button" android:paddingBottom="40dp" android:paddingStart="40dp" android:paddingEnd="50dp" android:paddingTop="40dp" android:textSize="30sp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- 4. ImageView padding 設定 --> <ImageView android:src="@drawable/bag" android:paddingBottom="30dp" android:paddingStart="50dp" android:paddingEnd="50dp" android:paddingTop="30dp" android:background="#a0f0a0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="@string/bag"/> </LinearLayout> |
リソースです
strings.xml
1 2 3 4 5 6 7 8 |
<resources> <string name="app_name">TestPaddingMargin</string> <string name="textview">TextView</string> <string name="pd1">padding(1)</string> <string name="pd2">padding(2)</string> <string name="button">Button</string> <string name="bag">Bag</string> </resources> |
分かりやすいように背景色を入れました。paddingを大きくするとその分背景が大きくなり、その背景を含めたViewの中での位置が決まります。
margin
View間の距離
marginの実際の使い方です。
android:layout_marginTop=”40dp”
ではViewの間隔となりTopにあるUIとの間隔を40dp取ることになります
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<!-- Bottomから40dp --> android:layout_marginBottom="40dp" <!-- Leftから20dp --> android:layout_marginStart="20dp" <!-- Rightから50dp --> android:layout_marginEnd="50dp" <!-- Topから20dp --> android:layout_marginTop="20dp" <!-- 上下左右 20dp --> android:layout_margin="20dp" |
実際に使ってみます
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" android:orientation="vertical" android:gravity="center" tools:context=".MainActivity"> <!-- 0. margine 設定なし --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#008000" android:text="@string/textview" android:textSize="20sp" android:textColor="#ffffff" /> <!-- 1. margine を上下左右それぞれに設定 --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#ffa080" android:layout_marginBottom="20dp" android:layout_marginStart="40dp" android:layout_marginEnd="20dp" android:layout_marginTop="40dp" android:text="@string/mg1" android:textSize="20sp" android:textColor="#ffffff" /> <!-- 2. margine 一括設定 --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#a080ff" android:layout_margin="20dp" android:text="@string/mg2" android:textSize="20sp" android:textColor="#ffffff" /> <!-- 3. button margine 設定 --> <Button android:text="@string/button" android:layout_marginBottom="40dp" android:layout_marginStart="20dp" android:layout_marginEnd="50dp" android:layout_marginTop="20dp" android:textSize="20sp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- 4. ImageView margine 設定 --> <ImageView android:src="@drawable/bag2" android:layout_marginBottom="20dp" android:layout_marginStart="40dp" android:layout_marginEnd="20dp" android:layout_marginTop="40dp" android:background="#a0f0a0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="@string/bag"/> </LinearLayout> |
リソース
strings.xml
1 2 3 4 5 6 7 8 |
<resources> <string name="app_name">TestPaddingMargin</string> <string name="textview">TextView</string> <string name="button">Button</string> <string name="mg1">margin(1)</string> <string name="mg2">margin(2)</string> <string name="bag">Bag</string> </resources> |
結果はこうなります
margineはそれぞれのViewどうしの間隔となっています
関連ページ:
- ScaleType:画像をスクリーンにうまくはめる
- dp, px, dpi, sp 画面の解像度単位
- レイアウトの間隔、padding と margin
- TableLayout 意外とうまくできないマス目配置
Reference:
レイアウト | Android Developers