动态创建单选按钮或CheckBox不使用颜色重音

时间:2014-11-03 16:16:17

标签: android themes android-5.0-lollipop android-appcompat

使用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 中膨胀。这些动态创建的对象不会继承我指定的颜色重音。如何正确设置这些颜色重音?

5 个答案:

答案 0 :(得分:11)

除了创建一个只有一个CheckBox的布局文件而不是给它充气之外,你无法做任何事情。

正如开发人员网站所述:只有在使用布局过热器加载视图时才能应用材质主题设计。

这是因为新的材料设计backport与布局膨胀过程挂钩。

来源:http://android-developers.blogspot.nl/2014/10/appcompat-v21-material-design-for-pre.html

修改
在较新版本的22.1+ AppCompat v7中,可以动态创建CheckBox和RadioButton等小部件(不再隐藏/内部API)。

目前支持这些小部件:

  • AppCompatAutoCompleteTextView
  • AppCompatButton
  • AppCompatCheckBox
  • AppCompatCheckedTextView
  • AppCompatEditText
  • AppCompatMultiAutoCompleteTextView
  • AppCompatRadioButton
  • AppCompatRatingBar
  • AppCompatSpinner
  • AppCompatTextView
  • AppCompatSeekBar(自23.1起)
  • AppCompatImageButton(自23.1起)
  • AppCompatImageView(自23.1起)

答案 1 :(得分:5)

我遇到了同样的问题,现在每个动态创建的视图都有一个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" />

答案 2 :(得分: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>

答案 3 :(得分:0)

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

android:theme="@style/RadioButtonStyle"

实施例

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

P.s这是在动态创建的单选按钮

答案 4 :(得分:-1)

尝试使用支持库中的AppCompatCheckBox:

import android.support.v7.widget.AppCompatCheckBox;

AppCompatCheckBox cb =  new AppCompatCheckBox(context);