2010年9月19日日曜日

Android ScrollView + Dialog で横幅を window いっぱいにする

例えば、

 タイトル
 本文 (ScrollView 内に TextView)
 ボタン

というダイアログがあるとします。
Layout が

 LinearyLayout
  ScrollView
   TextView
  Button

になっているとします。
この場合、LinearyLayout, ScrollView, TextView で
layout_width="fill_parent" を指定すると
こんな残念な感じになります。



ちなみに xml は


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dip"
android:gravity="center"
android:background="#666666"
>
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:autoLink="web"
android:text="Libraroid v5.11.235\n\n対応図書館..."
/>
</ScrollView>
<Button
android:id="@+id/dialog_cancel_about"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dialog_return"
android:layout_marginTop="10dip"
/>
</LinearLayout>



ここで、ScrollView を layout_width="wrap_content"
にします。

するとなぜかダイアログが画面の横幅いっぱいになります。謎。



xml はこうなる

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dip"
android:gravity="center"
android:background="#666666"
>
<ScrollView
// fill_parent -> wrap_content
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"
>
...
</ScrollView>
...
</LinearLayout>


こうすると、横幅いっぱいになってくれます。
layout_width="200dip" とか固定値にしても横幅は広くなりますが、
これのいいところは、画面の向きを横向きにした場合でもちゃんと
横長のダイアログになってくれるところです。
画面の解像度にもよらないので、マルチデバイスに対応するには
数字で指定するよりいいと思います。

画面いっぱいじゃなく、すこし隙間がほしいなと思って、
ルートの LinearLayout に layout_margin を設定したら
謎なことになりました。



グレーの部分が LinearLayout 部分。
なぜか右と下に padding っぽい隙間が!うーん謎。
ちなみに、xml はこんな感じ。


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dip"
android:gravity="center"
android:background="#666666"
// add layout_margin
android:layout_margin="20dip"
>
....
</LinearLayout>

1 件のコメント:

  1. dialogの幅は謎ですよね。。
    自分は、高さ1pxの透明なTextViewを
    android:layout_width="fill_parent"
    でしこんで、幅を広げてます。

    返信削除