web-dev-qa-db-ja.com

CheckBoxのデフォルト画像を変更する方法

私は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画像が使用されますか?

43
Damir

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" />
144
A.Quiroga

チェックボックスはボタンなので、独自のドロウアブルにチェック解除状態とチェックボックス背景として提供できます。例えば

<?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" />
9
Blackbelt

とても簡単です:)まず、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でも同じように動作します。ハッピーコーディング!

4
androidu

チェックボックスの画像をチェック状態に応じて動的に変更するために使用される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アイコンが設定されます。

0
Hiral Pancholi