我使用支持库" Theme.AppCompat.NoActionBar"我的应用程序的主题。
事实上,我使用了一个自定义的Checkbox(一个扩展" CheckBox"的类),由于某种原因,我不能获得与原生一样的样式,即使它代码不应该改变任何东西,即使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设计师为什么不能展示这种简单案例的真实表现方式?
我是否应该了解其他有这种行为的观点?
答案 0 :(得分:1)
根据小部件着色的AppCompat v21 blog post:
在使用Android 5.0的设备上运行时,所有小部件都使用我们刚才谈到的颜色主题属性进行着色。 Lollipop有两个主要功能:drawable着色,并在drawable中引用主题属性(形式为?attr / foo)。
AppCompat在早期版本的Android上为UI小部件的子集提供了类似的行为:
AppCompat工具栏(动作模式等)提供的所有内容
- 的EditText
- 微调
- 复选框
- 单选按钮
- 切换(使用新的android.support.v7.widget.SwitchCompat)
- CheckedTextView
不幸的是,这样做的一个限制是只有在XML文件中使用那些确切的类时才会这样做 - 而不是子类。例如你的lb.test.CheckBox
。该帖子的常见问题解答中有一条说明“这可能会在未来发生变化。”,但尚未发布任何内容。