Android用自定义drawable选择器替换复选框样式

Mar*_*vel 2 checkbox android

我试图用以下内容创建一个xml选择器:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/shuffleon" android:state_checked="true" />
    <item android:drawable="@drawable/shuffleoff" android:state_selected="false" />
</selector>
Run Code Online (Sandbox Code Playgroud)

当我尝试设置backgroundDrawablecheckBox复选框不更换CheckBox款式太:

  shuffle.setBackground(android.support.v4.content.res.ResourcesCompat.getDrawable(getResources(), R.drawable.shuffle, null));
Run Code Online (Sandbox Code Playgroud)

关注这个问题:为Checkbox for Android更改已选中和未选中的图标我需要设置button drawable我的xml:android:button="@drawable/checkbox"但我不能这样做,因为我正在以CheckBox编程方式创建.有没有办法如何实现这一目标?

Sun*_*nil 14

简单的方法

  1. 在drawable文件夹中创建一个新布局并将其命名为custom_checkbox(您也可以重命名)

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/Checked_image_name"android:state_checked="true"/>
    <item android:drawable="@drawable/Unchecked_image_name" android:state_checked="false"/>
    </selector>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在布局活动中使用它

    <CheckBox
    android:id="@+id/checkbox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:button="@drawable/custom_checkbox"/>
    
    Run Code Online (Sandbox Code Playgroud)


Mad*_*dhu 9

使用下面的代码行,我认为它会起作用

yourcheckbox.setButtonDrawable(yourdrawable); 
Run Code Online (Sandbox Code Playgroud)


kou*_*tuk 5

用这个

shuffle.setButtonDrawable(R.drawable.custom_checkbox_selector);
Run Code Online (Sandbox Code Playgroud)

XML 代码;

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/radiobutton_checked" android:state_checked="true"/>
    <item android:drawable="@drawable/radiobutton_unchecked" android:state_checked="false"/>

</selector>
Run Code Online (Sandbox Code Playgroud)


War*_*an- 5

如果您使用 sdk 28 (androidx) 及以上版本尝试使用

androidx.appcompat.widget.AppCompatCheckBox
Run Code Online (Sandbox Code Playgroud)

代替

Checkbox
Run Code Online (Sandbox Code Playgroud)