Android のチェックボックスを右寄せにする。

シェアする

checkbox on right

通常 Activity クラスでチェックボックスを使うと、左にチェックボックス、右にそのラベルが表示される。

これの左右を逆にする場合、チェックボックスとテキストビューの2つをLinearLayout内に突っ込んでごにょごにょしてやるのだが、そうするとチェックボックスのクリックの判定がチェックボックスそのものだけになってとてもクリックしにくくなってしまう。

というわけでちゃんとしたチェックボックスの右寄せバージョンを作ってみた。
LainerLayout 内で各要素に gravity を適切に指定した上で TextView に layout_weight をつけてやると良い感じになる。簡易的に作ったので実際に実装する際はちゃんと調節したほうが良いだろう。

まず XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
    <LinearLayout
        android:id="@+id/relativeLayout1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
		>
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_weight="0.38"
            android:gravity="center_vertical|left"
            android:text="Label"
            android:textAppearance="?android:attr/textAppearanceLarge" />
        <CheckBox
            android:id="@+id/checkBox1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_vertical|right" />
    </LinearLayout>
</LinearLayout>

次に Activity. ラベルとして表示している TextView に対して OnclickListener をつけ、そこで CheckBox の状態を変化させてやる。

public class TestConfigure extends Activity {

	CheckBox mCheckBox;
	TextView mTextView;

	public TestConfigure() {
		super();
	}

	@Override
	public void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		setContentView(R.layout.configure);
		this.mTextView = (TextView)findViewById(R.id.textView1);
		this.mTextView.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				mCheckBox = (CheckBox)findViewById(R.id.checkBox1);
				mCheckBox.setChecked(!mCheckBox.isChecked());
			}
		});
	}
}

ソースコードはいろいろ省略しているのでこのままでは動かないかもしれないが処理の流れとしては上記のような感じ。

Sponsored Link

シェアする

フォローする