余白を埋める
開発中、ViewとViewの間に余白を設けたい場合があります。
通常はmargin
やdivider
で調整しますが、間に余白のためのViewを置く場合もあると思います。
実はAndroidには、余白調整のためのSpaceというViewが存在しているのです。
Space
Space
はApi level 14で追加されたGridLayout
で発生する空のカラムを表現するために作られました。
Support Library v7にGridLayout
が収録された際、Space
も同時に収録されました。
Spaceと
他のViewとの大きな違いとして、描画を行わないという特徴があります。
以下のコードはSpace#draw
メソッドの実装になります。
/**
* Draw nothing.
*
* @param canvas an unused parameter.
*/
@Override
public void draw(Canvas canvas) {
}
Draw nothingの言葉通り、Space
では背景色を含む一切の描画が行われません。
余白のみ背景色を変えたいという場合には使えませんが、Viewの中で最も描画負荷が少ないというメリットがあります。
実装
Gradleの場合、以下のようにgridlayout-v7
ライブラリを取り込みます。
compile 'com.android.support:gridlayout-v7:20.0.+'
例として、縦に並んだカニ画像の間に50dpの余白を設けてみます。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/darker_gray"
android:orientation="vertical">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/kani" />
<android.support.v7.widget.Space
android:layout_width="match_parent"
android:layout_height="50dp" />
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/kani" />
</LinearLayout>
こうなりました。
余白部分はLinearLayout
の背景が透過されています。
注意点
繰り返しになりますが、Space
に背景色を設定しても無視されます。
以下のような記述はできますが、描画には反映されません。
<android.support.v7.widget.Space
android:layout_width="match_parent"
android:background="@android:color/white"
android:layout_height="50dp" />
使いどころ
正直、GridLayout
以外で使える場面はあまりないと思います。
大抵はmargin
やdivider
で十分です。
しかし、どうしても余白のためにViewを配置したい場合Space
の存在を思い出してください。