2011年11月19日土曜日

様々なViewの縦幅を揃える

様々なViewの縦幅を揃える

ViewGroupの中で使い道が無いと思われるものの一つとしてFrameLayoutを挙げることができるのではないだろうか。ここでは、このFrameLayoutの活用方法を無理矢理考える。

様々なViewを配置した場合、個々のViewの縦幅が異なるため、見た目が不細工になる。
個々のViewの縦幅を統一する簡便な方法として、FrameLayoutを用いる方法がある。

FrameLayoutの中に、表示したいViewと共に、縦幅が最も高いViewをダミーで挿入するのである。
ダミーViewを挿入するため、無駄なresourceを設けることにはなるが、作成が簡単であるため、試作品の作成には向いている。

ここでは静的な揃え方を書きましたが、動的に揃える書き方は、起動直後にViewのサイズを動的に変更するに書きました。

下記の例では、TextViewとSeekBarとSpinnerの3個のViewの高さを、全て、Spinnerの高さと同じ高さに揃えている。
高さ調整のため、 TextViewとSeekBarに対にしたSpinnerを非表示にしている。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <FrameLayout
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        >
        <TextView  
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:text="@string/hello"
            android:layout_gravity="center_vertical"
            >
        </TextView>
        <Spinner
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:visibility="invisible"
            >
        </Spinner>
    </FrameLayout>
    <FrameLayout
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        >
        <SeekBar
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:layout_gravity="center_vertical"
            >
        </SeekBar>
        <Spinner
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:visibility="invisible"
            >
        </Spinner>
    </FrameLayout>
    <Spinner
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        >
    </Spinner>
</LinearLayout>

0 件のコメント:

コメントを投稿