样式未应用于自定义复选框和单选按钮

6

我正在开发自定义复选框和单选按钮,但在Lollipop以下的设备上,样式未能应用(显示为黑色)。我的代码如下:

XML:

<com.kaho.myapp.CustomCheckBox
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="CheckBoxText"
  android:textColor="@color/colorPrimary"
  android:theme="@style/SampleTheme"/>

自定义复选框:

public class CustomCheckBox extends CheckBox {
    public CustomCheckBox(Context context) {
        super(context);
    }

    public CustomCheckBox(Context context, AttributeSet attrs) {
        super(context, attrs);
        setFont(context, attrs) ;
    }

    public CustomCheckBox(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setFont(context,attrs) ;
    }

    public CustomCheckBox(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        setFont(context, attrs) ;
    }

    private void setFont(Context context, AttributeSet attrs) {
        if (attrs != null) {
            /* Set the font */
        }
    }
}

设置字体的正确方法。 样式:

<style name="SampleTheme" parent="Theme.AppCompat.Light">
    <item name="colorAccent">#08c283</item>
    <item name="android:textColorSecondary">#969696</item>
</style>
2个回答

3
你遇到这个问题是因为在Android 5.0以下的设备上默认情况下无法设置colorAccent。为了实现这种效果,请从相应的支持视图中扩展你的视图。可能会有这样的代码:
public class CustomCheckBox extends AppCompatCheckBox
public class CustomRadioButton extends AppCompatRadioButton

以此方式,您的视图将在Lollipop以前的设备上具有材料设计风格。

0

看一下自定义的复选框,它适用于所有版本的棒棒糖之前和之后。

CustomCheckBox.java:

public class CustomCheckBox extends CheckedTextView {
    private Drawable btnDrawable;

    public CustomCheckBox(Context context) {
        this(context, null);
    }

    public CustomCheckBox(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public CustomCheckBox(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        colorAccordingToTheme();
    }

    @Override
    public void setCheckMarkDrawable(Drawable d) {
        super.setCheckMarkDrawable(d);
        btnDrawable = d;
    }

    @Override
    public void toggle() {
        super.toggle();
        colorAccordingToTheme();
    }

    @Override
    public void setChecked(boolean checked) {
        super.setChecked(checked);
        colorAccordingToTheme();
    }

    private void colorAccordingToTheme() {
        if (btnDrawable != null) {
            btnDrawable.setColorFilter(yourColor, PorterDuff.Mode.SRC_IN);
        }
    }
}

在 XML 布局中:

<?xml version="1.0" encoding="utf-8"?>
<com.yourpaackcge.CustomCheckBox xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/cb"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:checkMark="@drawable/selector_check_box"
    android:gravity="center|left"
    android:paddingRight="24dp"
    android:paddingLeft="24dp"
    android:background="@drawable/ripple"/>

我的选择器:

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

    <item android:drawable="@drawable/ic_check_box_on" android:state_pressed="true"/>

    <item android:drawable="@drawable/ic_check_box_on" android:state_checked="true"/>

    <item android:drawable="@drawable/ic_check_box_off"/>
</selector>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接