私はListViewを使用していますが、行ごとにrow_item.xmlがあり、コードでそれを膨らませます
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
>
<CheckBox
Android:id="@+id/chk"
Android:layout_alignParentLeft="true"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
<TextView
Android:id="@+id/txtChoice"
Android:textColor="#FF0000"
Android:text="TEST"
Android:layout_toRightOf="@id/chk"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" />
</RelativeLayout>
チェックボックスを変更すると、チェックされているときに別のcustom_1画像が使用され、チェックされていないときに別のcustom_2画像が使用されますか?
Drawable customdrawablecheckbox.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_checked="false" Android:drawable="@drawable/unchecked_drawable" />
<item Android:state_checked="true" Android:drawable="@drawable/checked_drawable" />
<item Android:drawable="@drawable/unchecked_drawable" /> <!-- default state -->
</selector>
yourcheckbox xml:
<CheckBox
Android:id="@+id/chk"
Android:button="@drawable/customdrawablecheckbox"
Android:layout_alignParentLeft="true"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
チェックボックスはボタンなので、独自のドロウアブルにチェック解除状態とチェックボックス背景として提供できます。例えば
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_checked="false" Android:drawable="@drawable/yourdrawable1" />
<item Android:state_checked="true" Android:drawable="@drawable/yourdrawable2" />
<item Android:drawable="@drawable/yourdrawable1" /> <!-- default -->
</selector>
これを描画可能なフォルダーのfile.xmlに配置します。チェックボックスで:
<CheckBox
Android:button="@drawable/file"
Android:id="@+id/chk"
Android:layout_alignParentLeft="true"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
とても簡単です:)まず、CheckBoxを拡張してonDraw(Canvas canvas)
メソッドをオーバーライドするCustomCheckBoxクラスを作成する必要があります。
public class CustomCheckBox extends CheckBox {
private final Drawable buttonDrawable;
public CustomCheckBox(Context context, AttributeSet set) {
super(context, set);
buttonDrawable = getResources().getDrawable(R.drawable.custom_check_box);
try {
setButtonDrawable(Android.R.color.transparent);
} catch (Exception e) {
// DO NOTHING
}
setPadding(10, 5, 50, 5);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
buttonDrawable.setState(getDrawableState());
final int verticalGravity = getGravity() & Gravity.VERTICAL_GRAVITY_MASK;
final int height = buttonDrawable.getIntrinsicHeight();
if (buttonDrawable != null) {
int y = 0;
switch (verticalGravity) {
case Gravity.BOTTOM:
y = getHeight() - height;
break;
case Gravity.CENTER_VERTICAL:
y = (getHeight() - height) / 2;
break;
}
int buttonWidth = buttonDrawable.getIntrinsicWidth();
int buttonLeft = getWidth() - buttonWidth - 5;
buttonDrawable.setBounds(buttonLeft, y, buttonLeft + buttonWidth, y + height);
buttonDrawable.draw(canvas);
}
}
}
また、描画可能なフォルダーにcustom_check_box
という名前のセレクターを作成します。
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_checked="true" Android:state_window_focused="false"
Android:drawable="@drawable/btn_check_on" />
<item Android:state_checked="false" Android:state_window_focused="false"
Android:drawable="@drawable/btn_check_off" />
<item Android:state_checked="true" Android:state_pressed="true"
Android:drawable="@drawable/btn_check_on" />
<item Android:state_checked="false" Android:state_focused="true"
Android:drawable="@drawable/btn_check_off" />
<item Android:state_checked="false" Android:drawable="@drawable/btn_check_off" />
<item Android:state_checked="true" Android:drawable="@drawable/btn_check_on" />
</selector>
そして、上記のXMLのカスタムアイコン/ imgを3つの状態すべてに使用します(focused/pressed/default)
次のようにXMLでカスタムコンポーネントを使用します。
<*package + class path*.CustomCheckBox // example com.mypackage.ui.CustomCheckBox if your project is named "mypackage" and the class is in the "ui" folder
Android:text="@string/text"
Android:checked="false" Android:layout_width="fill_parent"
Android:id="@+id/myCheckbox" Android:layout_height="wrap_content"/>
およびJava:
private CustomCheckBox mCheckbox;
mCheckbox = (CustomCheckBox) findviewbyid(R.id.myCheckbox);
私はそれを両方の方法で使用したために動作します:)そしていくつかの微調整を行うと、RadioButtonでも同じように動作します。ハッピーコーディング!
チェックボックスの画像をチェック状態に応じて動的に変更するために使用されるxmlでセレクターを使用できます。
例えば:
<item Android:drawable="@drawable/ic_linkedin" Android:state_checked="true" />
<item Android:drawable="@drawable/ic_linkedin_disabled" Android:state_checked="false" />
次のファイルでは、チェックボックスがチェックされている場合、ic_linkedinアイコンが設定され、チェックボックスがオフの場合、ic_linkedin_disabledアイコンが設定されます。