画面の向きによって、縦並びか横並びかを切り替える事は出来る?
出来ます。
画面が縦向き(Portrait)状態であれば、全てのViewが表示できるのに、横向き(landscape)にしたら、表示しきれない部分が出てきて困ってしまう場合がありました。
そういうときは、View全体を眺めます。
このViewを縦揃えから横揃えにしたら、画面に収まる!とか、そういう事を考えながら。
ここでは簡単な例で説明します。
例えば、二つのラジオボタン(RadioButton)があるとします。
で、そのラジオボタンは縦並び、つまり親のViewGroupのorientationの設定が「vertical」になっているとします。
これを画面が横向き(landscape)状態であれば、横並びにする。という事をやってみましょう。
今、以下のレイアウトXMLのように、LinearLayoutの中に、二つのRadioButtonと一つのTextViewがあるとします。
<LinearLayout
android:orientation=”vertical”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”>
<TextView android:text=”@+id/TextView01″ android:id=”@+id/TextView01″ android:layout_width=”wrap_content” android:layout_height=”wrap_content”>
</TextView>
<RadioButton android:id=”@+id/RadioButton01″ android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:text=”A”>
</RadioButton>
<RadioButton android:id=”@+id/RadioButton02″ android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:text=”B”>
</RadioButton>
</LinearLayout>
今回は、上のTextViewはそのままで、下のRadioButtonだけを並び替えたい、という気分であるとします。
今のままでは、親のLinearLayoutの設定を変えちゃうと、TextViewとRadioButtonが横並びになってしまいます。
それを避ける為、LinearLayoutの子に、LinearLayoutを追加します。
そして、その追加したLinearLayoutの中に、二つのRadioButtonを入れてあげます。
上記で、レイアウトの設定は完了です。
次にコードを追加します。
追加したLinearLayoutのIDは「LinearLayout01」とします。
Activityの、例えばonCreate()に以下のようなコードを追加します。
//画面向きに応じて、ラジオボタンの配置を変更
Configuration config = getResources().getConfiguration();
LinearLayout l = (LinearLayout)findViewById(R.id.LinearLayout01);
if(config.orientation == Configuration.ORIENTATION_LANDSCAPE){
l.setOrientation(LinearLayout.HORIZONTAL);
}else{
l.setOrientation(LinearLayout.VERTICAL);
}
これだけです。
Layoutを入れ子にすれば、大概は思い通りの画面が出来ます。