人生难得几回搏,此时不搏待何时。这篇文章主要讲述闲谈 Android 中的 @ 和 ?符号的引用区别相关的知识,希望能为你提供帮助。
在 android 项目开发中,我们经常会用 “@” 或者 “?” 符号去引用系统或者我们应用内添加的资源,这两种符号的引用有什么区别呢,“?attr/” 与 “?android:attr/” 之间又有怎样的不同呢?本文我们不妨闲聊一下。
【闲谈 Android 中的 @ 和 (符号的引用区别)】“@” 与 “?” 符号的引用在使用时都有一个规范的格式:“@[+][package:]type:name”,“?[package:][type:]name”。可以看到,二者均包含引用符号、资源所属的包、资源类型和资源名称。
@ 资源引用“@” 符号用于引用系统和我们在项目中添加的一些固有资源(drawable,string 等),或者定义的 style 样式。比如:
1 |
android:text="@string/app_name" |
values/strings.xml
中的字符串资源。
1 |
android:text="@android:string/cancel" |
? 属性引用“?” 符号用于引用当前主题中定义的一些属性值。注意,“?” 符号通过属性名字间接引用当前主题中的对应属性值,而不是属性本身。举个例子:
1 |
android:divider="?android:listDivider" |
那如何引用项目中自定义的属性呢?我们在
attrs.xml
中定义一个属性,如:
1 |
< declare-styleable name="CustomTextView"> |
1 |
< style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar"> |
R.attr & R.styleAndroid SDK 中定义有很多属性和主题可供使用,详见官方文档:R.attr & R.style。使用系统资源的好处就是,满足不同系统的适配需求,较为灵活。
这里举几个常用的:
style=”?android:attr/borderlessButtonStyle”
Android 5.0 默认 Button 的样式自带边框阴影,可以使用这个系统样式去除该样式。当然,这是单独设置时的操作,为了方便全局控制,可以在
styles.xml
中自定义一个样式,继承一个无边框样式作为 parent:
1 |
< style name="CustomBorderlessButtonStyle" parent="@style/Widget.AppCompat.Button.Borderless"> |
可用于设置一些 List Item、Button之类带点击效果的背景。该样式自带触摸点击效果,在 5.0 和更高版本上,更是附有 Ripple 涟漪效果,省去我们自己实现 selector 选择器的过程。当然我们也可以自己使用
<
ripple>
标签定义一个 drawable 文件实现涟漪效果,只是需要注意版本限制。这里举个例子,使用 <
ripple>
标签创建一个类似 FloatingActionButton 样式的按钮(minSdkVersion 为 21):新建 res/drawable/shape_ripple.xml 文件,构建类似 FAB 形状:
1 |
< ?xml version="1.0" encoding="utf-8"?> |
1 |
< ?xml version="1.0" encoding="utf-8"?> |
1 |
< Button |
文章图片
android:background=”?android:attr/dividerVertical”
实现分割线背景。
还有一些其他有用的系统资源,这里就不一一列举了…
推荐阅读
- Android组件——使用DrawerLayout仿网易新闻v4.4侧滑菜单
- Cocos2d-x v3.0正式版尝鲜体验 Android平台移植
- OpenCV4Android释疑:透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰)
- Android-broadcast静态动态广播
- 10个合法下载Torrent的最佳网站(哪个最好())
- 10+最佳订单管理系统(OMS)软件合集(哪个最好())
- 10款最佳移动会计应用合集(适用于Android和iOS)
- Android的15个最佳离线音乐播放器应用合集
- Windows中监控游戏FPS的5款最佳软件合集