美文网首页
android:background="?attr/colorP

android:background="?attr/colorP

作者: 远远飘着云 | 来源:发表于2018-05-14 16:55 被阅读0次

    @和?的区别

    style="android:attr/progressBarStyleHorizontal"

    style="@android:style/Widget.ProgressBar.Horizontal"

    在设置style的时候既可以使用@也可以使用?,他们有什么区别呢??

    使用@表示使用固定的style,而不会跟随Theme改变,这style可以在对应的style.xml中找到。

    使用?表示从Theme中查找引用的资源名,这个google叫预定义样式,用在多主题时的场景,属性值会随着主题而改变。(?需要和attr配合使用)

    例如上面的progressBarStyleHorizontal,查看\platforms\android-23\data\res\values\themes.xml文件,可以看到在不同的theme中,progressBarStyleHorizontal引用的style是不同的。看下面的示例:

    1.在Theme中

    @style/Widget.ProgressBar.Horizontal

    2.Theme.Holo中为

    @style/Widget.Holo.ProgressBar.Horizontal

    @style/Widget.AppCompat.ProgressBar.Horizontal

    @android:style/Widget.ProgressBar.Horizontal

    "?attr/属性""?属性""?android:属性""?android:attr/属性"

    另外:

    当引用系统自带的style和attr时

    "@android:style/主题"和"@style/android:主题"等同"?android:attr/属性"和"?attr/android:属性"等同

    自定义随主题改变的属性

    1、 如果是自定义控件,请在style.xml中或attrs.xml中声明属性:

    <declare-styleable name="SunnyAttr">

    如代码第五行所示,必须指明format为reference。这样自定义控件的属性就可以在xml使用,如果不明白,查看这里

    2、 在Theme中使用自定义的属性,可以再多个主题中定义不同的属性值

    3、 在对应的属性color,drawable等里面加入相应的资源

    #FFFF0000

    1

    4、这样就可以在xml中使用自定义控件的自定义属性,这个属性会随着主题而改变:

    见下面第五行代码

    相关文章

      网友评论

          本文标题:android:background="?attr/colorP

          本文链接:https://www.haomeiwen.com/subject/frsjdftx.html