我爱编程

Android 自定义属性

2018-06-21  本文已影响5人  一只笔
  • 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配合使用)
上一篇 下一篇

猜你喜欢

热点阅读