美文网首页
android中访问资源@ ?的区别

android中访问资源@ ?的区别

作者: codeflame | 来源:发表于2018-07-19 11:01 被阅读0次

概述:
@:引用资源
?:引用当前主题样式属性资源

区别:
1."资源"和"属性资源"
显然资源这个词范围大于属性资源。对于@,存在resource_typestringcolor等等的分类;对于?,就只有一个attr(因此语法书写上常省略)。

2.当前主题样式一词
一般需求下:

<resources>  
    <!-- 黑色 -->
    <color name="mycolor1">#000000</color>
    <!-- 没那么黑的黑色 -->
    <color name="mycolor2">#000001</color>
</resources>

这个我们直接@color/mycolor1这样就可以用了。

考虑另外一个需求,程序需要切换皮肤,有白天/夜晚模式。上面的方法需要我们手动批量去更改,不建议。这个时候应该使用主题,一个白天主题下定义一些偏亮的颜色,一个夜晚主题下定义一些偏暗的颜色。

<resources>  
    <style name="DarkTheme" parent="Theme.AppCompat.Light">
        <!-- 黑色 -->
        <color name="mycolor1">#000000</color>
        <!-- 没那么黑的黑色 -->
        <color name="mycolor2">#000001</color>
    </style>

    <style name="LightTheme" parent="Theme.AppCompat.Light">
        <!-- 白色 -->
        <color name="mycolor1">#FFFFFF</color>
        <!-- 没那么白的白色 -->
        <color name="mycolor2">#FFFFFE</color>
    </style>
</resources>

这个我们直接?mycolor1就可以。这样我们只需要去设置主题即可完成切换。

值得一提,某些安卓自带的控件的样式(属性),其值出于上述原因,被写在主题中,因此将需要使用?来引用。如果@android:的自动补齐中找不到你想要的值,不妨试试打?android:来找。



语法方面,阅读:文档
太长不看版:
@[<package_name>:]<resource_type>/<resource_name>
?[<package_name>:][<resource_type>/]<resource_name>

提一下:
application name:build.gradle里面的applicationId
package name:就是AndroidManifest.xml文件中,里面manifest的属性package
详情:https://blog.csdn.net/qq_17250009/article/details/53896168

相关文章

网友评论

      本文标题:android中访问资源@ ?的区别

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