2012年11月6日火曜日

FrameLayoutの中のViewの位置を揃える

下記のサンプルではTextViewの位置が、Spinnerの縦中央になるようにしている。これを行わない場合、TextViewの位置は、画面の上部にくっついたものとなり、TextViewとRadioButtonの間が空きすぎてしまい、不自然に見える。
FrameLayoutのメンバーViewであるLinearLayoutにandroid:layout_gravity="center_vertical"を加える。
<?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="wrap_content"
>
<FrameLayout
android:layout_width="fill_parent"
android:Layout_height="wrap_content"
>
<Spinner
android:id="@+id/Spinner"
android:layout_width="fill_parent"
android:Layout_height="wrap_content"
>
</Spinner>
<LinearLayout
android:id="@+id/LinearLayout"
android:layout_width="fill_parent"
android:Layout_height="wrap_content"
android:layout_gravity="center_vertical"
>
<TextView
android:id="@+id/TextView"
android:text="@string/noData"
android:layout_width="fill_parent"
android:Layout_height="wrap_content"
>
</TextView>
</LinearLayout>
</FrameLayout>
<RadioGroup
android:id="@+id/RadioGroup"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<RadioButton
android:id="@+id/Button0"
android:text="@string/Button0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</RadioButton>
<RadioButton
android:id="@+id/Button1"
android:text="@string/Button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</RadioButton>
<RadioButton
android:id="@+id/Button2"
android:text="@string/Button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</RadioButton>
</RadioGroup>
</LinearLayout>

public class FrameLayoutTestActivity extends Activity
implements
OnCheckedChangeListener
{
RadioGroup rg;
Spinner sp;
LinearLayout ll;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayAdapter<CharSequence> adapter;

ll = (LinearLayout)findViewById(R.id.LinearLayout);
sp = (Spinner)findViewById(R.id.Spinner);
rg = (RadioGroup)findViewById(R.id.RadioGroup);
rg.setOnCheckedChangeListener(this);
rg.check(R.id.Button0);
sp.setVisibility(View.INVISIBLE);
ll.setVisibility(View.VISIBLE);

adapter = ArrayAdapter.createFromResource(
this, R.array.Array,
android.R.layout.simple_spinner_item
);
adapter.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item
);
sp.setAdapter(adapter);
}

@Override
public void onCheckedChanged(RadioGroup group, int checkedId){
if(group==rg){
TextView tv;
tv = (TextView)findViewById(R.id.TextView);
switch(checkedId){
case R.id.Button0:
ll.setVisibility(View.VISIBLE);
sp.setVisibility(View.INVISIBLE);
tv.setText(R.string.noData);
break;
case R.id.Button1:
ll.setVisibility(View.VISIBLE);
sp.setVisibility(View.INVISIBLE);
tv.setText(R.string.OneItem);
break;
case R.id.Button2:
sp.setVisibility(View.VISIBLE);
ll.setVisibility(View.INVISIBLE);
break;
}
}
}
}

<?xml version="1.0" encoding="UTF-8"?>
<resources>
<string-array name="Array">
<item>dog</item>
<item>cat</item>
<item>mouse</item>
<item>worm</item>
</string-array>
</resources>

0 件のコメント:

コメントを投稿