ScrollViewの子LinearLayoutでheightをmatch_parentにできない

ScrollViewの子のLinearLayoutでheightをmatch_parentにできない時

Androidアプリの画面レイアウトをxmlで編集しているとき、
ScrollViewの入れ子にしてあるLinearLayoutでどうしてもheightをmatch_parentにしたいことがありました。

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </LinearLayout>
 
 </ScrollView>

しかし、子のLinearLayoutでandroid:layout_height=”match_parent”とすると、
「This LinearLayout should use android:layout_height=”wrap_content”」という警告が出ます…
警告を無視してレイアウトの編集を断行しても、heightがmatch_parentになってくれてないことに気付きます(T_T)

結論としてはScrollViewの子のLinearLayoutでは性質上、heightをmatch_parentにすることはできないようです。

なので親のScrollViewをLinearLayout等に変えるか、もしくはmatch_parentにするのを諦めるかという選択になります。

今思うと、ページをスクロールさせるんだからwrap_contentでページの高さを自動調整させるのが普通だろという気がします。
どうしてもmatch_parentにしたかった理由は以下に書きますので興味のある方は読んでみてください。

理由

画面がPortraitの時はスクロールバーを使わず、どんな端末でも画面の左下にボタンを表示させ、画面がLandscapeの時はスクロールバーを使って画面が切れないようにしたかった。

結局match_parentを使うのを諦めたのですが、「横画面にした時だけスクロールバーを表示させる」という手法があると思います。
まだ調べられていませんが、発見し次第追記したいと思います。

※追記(5/29)
画面の向きによってレイアウト変更する方法がありました。
手順↓

プロジェクトのresの中に「layout-land」というフォルダを作り、そのフォルダ内にLandscapeの時用のxmlファイルを作ります。
尚、Landscape用のxmlファイルの名前は、「layout」フォルダに入っている該当のxmlファイルと同じにします。

以上でとても簡単に問題が解決できました..!

by 芦野輝明
twitter→https://twitter.com/teriyakiegg

Android

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です