动态创建的单选按钮或复选框未使用颜色强调。

5

使用v21 AppCompat,我们可以设置自定义的颜色主题,例如下面:

<style name="Theme.MyTheme" parent="Theme.AppCompat">
    <!-- customize the color palette -->
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>
</style>

但是我有许多动态创建的复选框和单选按钮它们不是从xml中膨胀而来。这些动态创建的对象没有继承我指定的色彩强调。我该怎么做才能正确设置这些颜色强调呢?


Neoh,你最终解决了你的问题吗? - Rolf ツ
不,我必须使用XML来填充视图,即使它们是动态创建的,就像他们建议的那样。 - Neoh
即使使用了新的AppCompat小部件?请看我的回答。 - Rolf ツ
5个回答

11
除了创建一个只有一个复选框的布局文件并填充它之外,您无法做任何事情。
开发者网站提到:“仅当使用布局填充器加载视图时,才能应用材料主题设计。”
这是因为新的 Material Design 后向兼容钩子集成到布局膨胀过程中。
来源: http://android-developers.blogspot.nl/2014/10/appcompat-v21-material-design-for-pre.html 编辑: 在 AppCompat v7 的较新版本 22.1+ 中,像 CheckBox 和 RadioButton 这样的小部件可以动态创建(不再是隐藏的 / 内部 API)。
当前支持以下小部件:
- AppCompatAutoCompleteTextView - AppCompatButton - AppCompatCheckBox - AppCompatCheckedTextView - AppCompatEditText - AppCompatMultiAutoCompleteTextView - AppCompatRadioButton - AppCompatRatingBar - AppCompatSpinner - AppCompatTextView - AppCompatSeekBar (自 23.1 开始) - AppCompatImageButton (自 23.1 开始) - AppCompatImageView (自 23.1 开始)

6

我遇到了同样的问题,现在为我动态创建的每个视图都有一个material_factory_* xml文件。这有点烦人,但它有效:

// checkbox = new CeckBox(context);
checkbox = (CheckBox) View.inflate(context, R.layout.material_factory_checkbox, null);

还有 material_factory_checkbox.xml 文件:

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

1
你可以实际做一些事情,例如在充气视图上应用样式,如下所示:
    <CheckBox
        android:id="@+id/check_text"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/save_password_label"
        android:theme="@style/CheckBoxStyle"
        />

带有样式的:

<style name="CheckBoxStyle" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorAccent">@color/colorPrimary</item>
</style>

0

遇到了同样的问题。你需要设置单选按钮主题,而不是样式。

android:theme="@style/RadioButtonStyle"

例子

<RadioButton 
android:theme="@style/RadioButtonStyle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp" />

PS:这是在动态创建的单选按钮上工作。


-1

尝试使用支持库中的AppCompatCheckBox:

import android.support.v7.widget.AppCompatCheckBox;

AppCompatCheckBox cb =  new AppCompatCheckBox(context);

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