ListViewのpadding設定
ListViewにpaddingを設定する
ListViewで子要素の配置を調整する場合、通常はandroid:padding
で描画領域を、android:dividerHeight
で子要素同士の間隔を設定する。
この時、単純にandroid:padding
だけ指定すると以下のようにリストの上下端で子要素が途切れてしまう。
これを防ぐためには、android:clipToPadding
属性でpadding領域であっても子要素を描画するように設定する。
<ListView android:id="@android:id/list" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/darker_gray" android:clipToPadding="false" android:divider="@null" android:dividerHeight="16dp" android:padding="16dp" />
styleで定義する
いちいちListView
に全部の設定を書くのは面倒なので、上記設定をstyle
でやろうとするとこうなる。
<style name="ListView"> <item name="android:padding">16dp</item> <item name="android:clipToPadding">false</item> <item name="android:divider">@null</item> <item name="android:dividerHeight">16dp</item> <item name="android:background">@android:color/darker_gray</item> </style>
<ListView android:id="@android:id/list" style="@style/ListView" android:layout_width="wrap_content" android:layout_height="wrap_content" />
themeで定義する
いちいちListView
にstyleを書くのは面倒なので、上記設定をthemeでやろうとするとこうなる。
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> <item name="android:listViewStyle">@style/ListView</item> </style>
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > ...
…のだが、なぜかうまくいかない。
どうやらthemeではandroid:clipToPadding
の設定が反映されないらしい。
仕方がないのでソースコード側でListView#setClipToPadding(false)
を呼び出すと動く。
ListFragment
で標準レイアウトを使う場合、themeで基本レイアウトを指定した後android:clipToPadding
だけソースコードで上書きするしかなさそうだ。
getListView().setClipToPadding(false);
これでうまく表示できた