- 1.自定义随主题改变的属性, 如果是自定义控件,请在style.xml中或attrs.xml中声明属性。在values 文件夹下新 attrs
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="Primary">
<attr name="colorBaseNormal" format="reference"/>
<attr name="colorBasePressed" format="reference"/>
<attr name="colorBaseDisable" format="reference"/>
</declare-styleable>
</resources>
- 2.在Theme中使用自定义的属性,可以再多个主题中定义不同的属性值
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorBaseNormal">@color/colorBaseNormal</item>
<item name="colorBasePressed">@color/colorBasePressed</item>
<item name="colorBaseDisable">@color/colorBaseDisable</item>
</style>
- 3.这样就可以在xml中使用自定义控件的自定义属性,这个属性会随着主题而改变:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="?attr/colorBaseNormal" />
@和?的区别
- 使用@表示使用固定的style,而不会跟随Theme改变,这style可以在对应的style.xml中找到。
- 使用?表示从Theme中查找引用的资源名,这个google叫预定义样式,用在多主题时的场景,属性值会随着主题而改变。(?需要和attr配合使用)
网友评论