Android 如何保持支持库的样式';自定义复选框视图上的复选框? 背景

Android 如何保持支持库的样式';自定义复选框视图上的复选框? 背景,android,checkbox,android-support-library,android-styles,Android,Checkbox,Android Support Library,Android Styles,我为我的应用程序使用支持库的“Theme.AppCompat.NoActionBar”主题 问题 问题是,我使用一个定制的复选框(一个扩展了“复选框”的类),由于某种原因,我没有得到与本机复选框相同的样式,即使它的代码不应该改变任何东西,即使UI设计器显示它是可以的 这是一个显示这种情况的截图 UI设计器: Android Kitkat设备: 下面是XML: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/

我为我的应用程序使用支持库的“Theme.AppCompat.NoActionBar”主题

问题 问题是,我使用一个定制的复选框(一个扩展了“复选框”的类),由于某种原因,我没有得到与本机复选框相同的样式,即使它的代码不应该改变任何东西,即使UI设计器显示它是可以的

这是一个显示这种情况的截图

UI设计器:

Android Kitkat设备:

下面是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设计器不能为如此简单的情况显示它的真实方式

还有其他我应该知道的视图有这种行为吗?

根据小部件着色:

在Android 5.0设备上运行时,所有小部件都使用我们刚才提到的颜色主题属性着色。在棒棒糖上有两个主要的特性可以实现这一点:可绘制的着色,以及在可绘制中引用主题属性(attr/foo形式)

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

AppCompat工具栏提供的一切(操作模式等)

  • 编辑文本
  • 纺纱机
  • 复选框
  • 单选按钮
  • 开关(使用新的)
  • CheckedTextView

不幸的是,这种方法的一个局限性是,只有在XML文件中使用这些类时,才可以使用它,而不是子类。例如您的
lb.test.CheckBox
。在那篇文章的常见问题中有一条说明“这在将来可能会改变”,但到目前为止还没有发布任何内容。

那么我该如何解决这个问题呢?我真的需要这个自定义视图。。。一定有一个风格或东西,他们使用前棒棒糖。。。否则,我就不会在Kitkat上看到这种情况……根据相同的FAQ:“AppCompat中的小部件着色通过拦截任何布局膨胀并在其位置插入小部件的特殊着色版本来工作……特殊着色小部件当前被隐藏,因为它们是未完成的实现细节。”因此,如果你想在自定义视图上实现相同的行为,你就必须对他们的着色感知小部件进行反向工程。这真的很奇怪。我确信我会在绘图或代码中找到它。甚至主题本身也是非常小的:它有“windowActionBar”和“android:windowNoTitle”的值,仅此而已。它甚至没有显示它有一个父母。。。你知道有哪家图书馆有这种风格吗?也许这就是目前的解决方案。在AppCompat爆炸式AAR中,我确实看到了一个
abc_btn_check_to_on_mtrl_000.png
abc_btn_check_to_on_mtrl_015.png
,它们看起来像是所使用的未安装版本的可牵引电缆。