Android の ListView のアイテムの子要素の android:height="match_parent" が効かない
Android アプリ開発で、ListView
の項目として FrameLayout
や RelativeLayout
を使っていたのですが、その子で android:height="match_parent"
の指定がなされている view が全く表示されなくて困っていました。
原因を探ってみたところ、どうやら ListView
の項目として表示されている view の子要素の android:height="match_parent"
は有効でないようで、高さが 0 になっていたのが原因のようでした。
例
次のようなレイアウト XML があるとします。 (list_item.xml とします。)
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="80dp" android:background="#CCCCCC"> <ImageView android:src="@drawable/ic_launcher" android:adjustViewBounds="true" android:layout_width="wrap_content" android:layout_height="50dp" android:padding="0dp" /> <View android:layout_height="match_parent" android:layout_width="match_parent" android:background="#66000000" /> </FrameLayout>
このレイアウトを、次のように include
で LinearLayout
の中に読み込むと、期待通り view は高さ 80 dp で表示され、view 全体が #66000000 の色で覆われます。
<include layout="@layout/list_item" />
しかし、ListView
の項目として表示すると、高さは ImageView
の 50 dp で揃えられ、view 全体が #66000000 の色で覆われることはありませんでした。
具体的な表示としては下記のようになりました。
細かい原因や回避策などは不明
ちょこっとしか調べてなくて、今のところ詳しい原因はわかっていません。 Hierarchy Viewer で見ると、View
の高さが 0 になっていたので android:height="match_parent"
が効いてないのであろうことはわかるのですが、なんでそうなるのかは ListView
などのソースコードを見るしかなさそうです。
そんなわけで特に問題の回避策は見つかってないのですが、そういう問題があるという情報自体が web 上にあまり見当たらなかったので、問題があるということだけ書き残しておきます。