概述:
@:引用资源
?:引用当前主题样式的属性资源
区别:
1."资源"和"属性资源"
显然资源这个词范围大于属性资源。对于@,存在resource_type
为string
、color
等等的分类;对于?,就只有一个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
网友评论