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);
これでうまく表示できた
