Android
Android レイアウト 中身が違っても均等な幅のボックスを作る
中々言葉で表現するのは難しいので、下記を見てほしいのですが、(弊社で開発しているSmart動態管理というソフトの一画面です)
下の部分の「到着」「休憩」は同じ文字数だからよいのですが、上の「空車」「積込済」というのは字数が違いますよね。
なので、ボタンの幅がそろわず、見た目がよくないです。
均等な幅を実現するために android:layout_weight というパラメーターがありますが、これを指定していても、android:layout_width=”wrap_content”などがあると、android:layout_widthの方が優先されてしまうんですね。
この部分のソースコードはこんな感じです。
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingTop="10dp"
android:paddingBottom="5dp" >
<Button
android:id="@+id/vacant_button"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_weight="0.5"
android:text="@string/vacant"
android:textSize="24sp"
android:background = "@drawable/vacant_button"
android:layout_marginRight="5dp"
/>
<Button
android:id="@+id/occupied_button"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_weight="0.5"
android:text="@string/occupied"
android:textSize="24sp"
android:background = "@drawable/occupied_button"
/>
</LinearLayout>
android:layout_widthをなくすと、NullPointerEcceptionでエラーになります。
かといって、可変にしたいので、絶対的な大きさにもしたくない…
テーブルレイアウトは面倒…
そんな場合は、android:layout_width=”0dp”として回避しています。
//変更後のソースコード
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingTop="10dp"
android:paddingBottom="5dp" >
<Button
android:id="@+id/vacant_button"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_weight="0.5"
android:text="@string/vacant"
android:textSize="24sp"
android:background = "@drawable/vacant_button"
android:layout_marginRight="5dp"
/>
<Button
android:id="@+id/occupied_button"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_weight="0.5"
android:text="@string/occupied"
android:textSize="24sp"
android:background = "@drawable/occupied_button"
/>
</LinearLayout>
修正後の画面はこんな感じになります。