如何在自定义的复选框视图中保留支持库的复选框样式?

时间:2014-12-19 21:14:14

标签: android checkbox android-support-library android-styles

背景

我使用支持库" Theme.AppCompat.NoActionBar"我的应用程序的主题。

问题

事实上,我使用了一个自定义的Checkbox(一个扩展" CheckBox"的类),由于某种原因,我不能获得与原生一样的样式,即使它代码不应该改变任何东西,即使UI设计师表明它没问题。

这是显示该情况的屏幕截图。

UI设计师:

enter image description here

Android Kitkat设备: enter image description here

这就是XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:gravity="center"
              android:orientation="vertical"
              tools:context=".MainActivity">

    <CheckBox
        android:layout_width="wrap_content"
        android:text="Native Checbox"
        android:layout_height="wrap_content"
        android:checked="false"/>

    <CheckBox
        android:layout_width="wrap_content"
        android:text="Native Checbox checked"
        android:layout_height="wrap_content"
        android:checked="true"/>

    <lb.test.CheckBox
        android:layout_width="wrap_content"
        android:text="Customized Checbox"
        android:layout_height="wrap_content"
        android:checked="false"/>

    <lb.test.CheckBox
        android:layout_width="wrap_content"
        android:text="Customized Checbox checked"
        android:layout_height="wrap_content"
        android:checked="true"/>
</LinearLayout>

我更喜欢用于原生复选框的常规样式。

为了简单起见,我已经尽可能减少了这个测试,你可以把CTOR用于自定义复选框,使它几乎与普通复选框相同。

问题

我该如何克服这种奇怪的行为? UI设计师为什么不能展示这种简单案例的真实表现方式?

我是否应该了解其他有这种行为的观点?

1 个答案:

答案 0 :(得分:1)

根据小部件着色的AppCompat v21 blog post

  

在使用Android 5.0的设备上运行时,所有小部件都使用我们刚才谈到的颜色主题属性进行着色。 Lollipop有两个主要功能:drawable着色,并在drawable中引用主题属性(形式为?attr / foo)。

     

AppCompat在早期版本的Android上为UI小部件的子集提供了类似的行为:

     

AppCompat工具栏(动作模式等)提供的所有内容

     

不幸的是,这样做的一个限制是只有在XML文件中使用那些确切的类时才会这样做 - 而不是子类。例如你的lb.test.CheckBox。该帖子的常见问题解答中有一条说明“这可能会在未来发生变化。”,但尚未发布任何内容。