闲谈Android中的@和?符号的引用区别

华为OD机试 - 战士技能规划设计 - 数组(Python/JS/C/C++ 新系统 100分) 本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。你为一款动作游戏设计战士角色的技能:战士每个技能会消耗不同能量,释放技能有 2 个约束:连续释放技能数量不能超过 m 个,技能能量总和不能超过能量上限 k;如果超过则必须中断当前技能,进入调息状态(即分段)。战士有一项爆发技巧:在单次战斗中有一次 阅读详情

在 Android 项目开发中,我们经常会用 “@” 或者 “?” 符号去引用系统或者我们应用内添加的资源,这两种符号的引用有什么区别呢,“?attr/” 与 “?android:attr/” 之间又有怎样的不同呢?本文我们不妨闲聊一下。

“@” 与 “?” 符号的引用在使用时都有一个规范的格式:"@[+][package:]type:name","?[package:][type:]name"。可以看到,二者均包含引用符号、资源所属的包、资源类型和资源名称。

@ 资源引用

“@” 符号用于引用系统和我们在项目中添加的一些固有资源(drawable,string 等),或者定义的 style 样式。比如:

android:text="@string/app_name" 

这里的 app_name 就是我们自己定义在项目文件 values/strings.xml 中的字符串资源。

android:text="@android:string/cancel" 

而这里的 cancel 属于 Android SDK 中的系统字符串资源,所以需要添加@android: 来指明引用来源。android: 是 package: 的一个具体实例。

? 属性引用

“?” 符号用于引用当前主题中定义的一些属性值。注意,“?” 符号通过属性名字间接引用当前主题中的对应属性值,而不是属性本身。举个例子:

android:divider="?android:listDivider" 

这里的 “?” 符号通过属性名 android:listDivider 间接获取当前主题赋予该属性的值。如同 @android: 一般,?android: 表示该值源自 Android SDK 系统属性。由于在当前主题中寻找对应属性名的值,所以没有指定属性类型,其实等同于:?android:attr/listDivider。

那如何引用项目中自定义的属性呢?我们在 attrs.xml 中定义一个属性,如:

<declare-styleable name="CustomTextView"> 
    <attr name="colorTextCustom" format="reference|color"/> 
</declare-styleable> 

显然,此时我们定义的 colorTextCustom 属性是没有值的,直接引用没有任何作用。需要在主题 style 中赋值:

<style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="colorTextCustom">#FF0000</item> 
</style> 
 
<style name="AppTheme" parent="BaseTheme"> 
    <item name="android:textColor">?colorTextCustom</item> 
</style> 

可以看到,这里在 BaseTheme 中对 colorTextCustom 属性赋值,并在 AppTheme 中通过 “?colorTextCustom” 引用该属性值。由于是本地项目中定义的属性,所以没有添加 android: 命名空间。其实,这种做法的好处是,AppTheme 所覆盖的 View 均可通过构造函数获取当前主题中的 colorTextCustom 属性值。

R.attr & R.style

Android SDK 中定义有很多属性和主题可供使用,详见官方文档:R.attr &R.style。使用系统资源的好处就是,满足不同系统的适配需求,较为灵活。

这里举几个常用的:

style="?android:attr/borderlessButtonStyle"

Android 5.0 默认 Button 的样式自带边框阴影,可以使用这个系统样式去除该样式。当然,这是单独设置时的操作,为了方便全局控制,可以在 styles.xml 中自定义一个样式,继承一个无边框样式作为 parent:

<style name="CustomBorderlessButtonStyle" parent="@style/Widget.AppCompat.Button.Borderless"> 
    <item name="android:textColor">@android:color/white</item> 
    ... 
</style> 
android:background="?android:attr/selectableItemBackground"

可用于设置一些 List Item、Button之类带点击效果的背景。该样式自带触摸点击效果,在 5.0 和更高版本上,更是附有 Ripple 涟漪效果,省去我们自己实现 selector 选择器的过程。当然我们也可以自己使用 <ripple> 标签定义一个 drawable 文件实现涟漪效果,只是需要注意版本限制。

android:background="?android:attr/dividerVertical"

实现分割线背景。

还有一些其他有用的系统资源,这里就不一一列举了...

ssm框架搭建 这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载 立即下载

相关推荐

Windows下用Docker快速搭建SearXNG私有搜索引擎(附Dify集成配置)

本文详细介绍了在Windows环境下使用Docker快速搭建SearXNG私有搜索引擎的完整流程,包括环境准备、容器化部署、安全配置优化以及与Dify平台的深度集成方法。通过分步指导和实用配置示例,帮助开发者构建兼具隐私保护和AI增强能力的本地化搜索解决方案,特别适合需要定制化搜索服务的应用场景。

weixin_30300225的博客 336

Android高手进阶教程(一)-------Android常用名令集锦(图文并茂)!

大家好,今天我们要讲的是android开发中,比较常用的名令集锦, 在我们开发中难免用到Android命令,有些确实命令确实很有用处。特别对于一些初学者来说,命令根本没有想过用也不会用,比如他们想安装一个.apk文件到模拟器上面,但是他们不会启动模拟器,他们只会先启动Eclipse,然后在启动模拟器,这样不但浪费时间,而且Eclipse又占用你的内存。这也是我为什么总结这篇文章的原因了,希望对

Android_Tutor的专栏 6万+

Python主要智能优化算法库汇总

最近几年简单浏览和对比了一些智能算法的库。现将各种库的主要信息、相关优缺点简单整理如下,各位同学可根据自己的需求和喜好进行选择。 文章目录1、DEAP2、mealpy3、scikit-opt (国产良心)4、Geat2(国产用心)5、pygmo26、pyswarms7、SciPy(想不到吧)小结 1、DEAP 项目地址:https://github.com/DEAP/deap 安装: pip install deap 优点: 起点高,发表在Journal of Machine Learning Rese

半个冯博士 2万+

Android之?,@,@+代表的作用和意义

Android之?,@,@+代表的作用和意义文章链接知识点 资源文件简介; @,?的作用和意义; @的使用; @+的使用; 新名词记录{资源文件引用@,?;} 概述在android开发中,资源文件里总是会出现”@string/hello” 、“@android:color/darker_gray”、”@+id/title”、”?android:attr/textAppearanceSmall”,的引

姚镜堂 4212

HIL(硬件在环)技术汇总梳理

HIL(Hardware-in-the-Loop)测试领域的知名公司有dSPACE、NI、Vector和speedgoat等,本文是针对这几家HIL技术的对比分析。

Mr.Cssust的博客 3686

CAN收发器TJA1145A休眠唤醒应用

TJA1145的唤醒工作原理主要依赖于其内部的唤醒机制和外部硬件的配合,主要涉及低功耗状态、选择性唤醒功能。TJA1145是一款CAN收发器,它支持多种工作模式,包括NormalStandbySleep等。在这些模式中,Sleep模式是最低功耗状态,而Normal模式则是最活跃的状态,其中Standby模式处于两者之间,允许一定的功能操作但功耗较低。TJA1145可以通过接收特定的唤醒源从Sleep或Standby模式唤醒到Standby或Normal模式。唤醒源的检测与处理。

radix关于mcu的博客,持续更新中... 5950

Android xml 中@和问号?等解释

文章目录Android xml资源文件中@、@android、@*、?、@+含义和区别1. @代表引用资源2. @android 代表引用系统公开资源(第三方app可以使用)3. @* 代表引用系统的非public资源4. ? 代表引用主题属性5. @+ 代表在创建或引用资源 Android xml资源文件中@、@android、@*、?、@+含义和区别 1. @代表引用资源 引用自定义资源。格...

此男子淡漠 5042

CIMPro孪大师,支持 3DGS 高斯泼溅的一站式零代码数字孪生平台

高斯泼溅导入数字孪生开发引擎

2501_90821319的博客 1109

Android 开发杂记——@, @+, ? 的介绍

马上要毕业了,趁着毕业之前随便学了一些技术。前段时间刚把一本《Head First 设计模式》学完,现在开始着手学习 Java + Android。在 Android 官网上找了一些例程源码进行学习,发现完全看不懂啊,需要学的又有很多…… 那就重头来吧,打开新世界什么的我最喜欢了~ 首先,先从笔者最不解的部分开始,即用来布局的 xml 文件中的一些符号,如 @, @+, ? 等。

琦小虾的代码世界 2243

【DeepSeek应用实践】手把手教程:用 AnythingLLM + Ollama + DeepSeek-R1 搭建本地企业知识库

在众多的技术方案中,我们选择了 AnythingLLM、Ollama 和 DeepSeek-R1 这一组合来搭建本地知识库。Ollama 作为一个轻量级的本地化大语言模型部署工具,支持多种模型,易于安装和使用,能够快速在本地运行强大的语言模型。DeepSeek-R1 是一个专为知识库问答设计的检索增强生成(RAG)模型,它结合了检索和生成的优势,能够快速从知识库中检索相关信息并生成精准答案。而 AnythingLLM 则是一个用户友好的界面工具,可以方便地连接 Ollama 和 DeepSeek-R1

寻道AI,探索AI无限可能! 2566

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

?attr/selectableItemBackground的使用(TypedArray,TypedValue)

?attr的使用

xilove102的博客 6380

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

闲谈 Android 中的 @ 和 ?符号的引用区别

在 Android 项目开发中,我们经常会用 “@” 或者 “?” 符号去引用系统或者我们应用内添加的资源,这两种符号的引用有什么区别呢,“?attr/” 与 “?android:att...

滴水穿石,点石为金 691

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Android入门教程(四)

关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己。 本篇文章同步微信公众号 欢迎大家关注我的微信公众号:「醉翁猫咪」 学习Android要掌握Android程序结构,和通信技术,和如何搭建Android开发环境,那么我之前有发过《Android Studio系列教程---下载与安装》《Android Studio系列教程---

程序员哆啦A梦,蓝胖子 599

Android基础入门教程(四)

点击上方“醉翁猫咪”,选择“置顶公众号”有趣有内涵的文章第一时间送达!喝酒I创作I分享生活中总有些东西值得分享@醉翁猫咪学习Android要掌握Android...

程序员哆啦A梦,蓝胖子 381

Android 中@符号的使用_逝水殇_新浪博客

@符号是用来引用R.java中的内容,R.java是eclipse自动生成的,不要修改。 Android中的组件需要用一个int类型的值来表示,这个值也就是组件标签中的id属性值。 id属性只能接受资源类型的值,也就是必须以@开头的值.如果在@后面使用“+”,表示当修改完某个布局文件并保存后,系统会自动在R.java文件中生成相应的int类型变量。 ...

技术小白 611

自定义控件属性以及代码设置selectableItemBackground

selectableItemBackground 自定义控件

u012810034的博客 1万+

android代码设置attr,java – 如何以程序方式设置android:background =“?android:attr / selectableItemBackground”?...

您需要先解析该属性.TypedValue typedValue = new TypedValue();// I used getActivity() as if you were calling from a fragment.// You just want to call getTheme() on the current activity, however you can get itget...

weixin_31783001的博客 581

android布局描述,Android布局中使用的@、@+、?和*的详细描述

之前在网上看到很多朋友对android布局文件中的@、@+、?和*不能清晰的理解和使用。在网上搜了一下,也没有看到很好的文章对这个问题进行解决。所以,我研究整理了他们的关系和使用方法,同时附上原始的出处。以便想更深入研究的朋友考究。英文大家找个翻译软件比对着看吧。概括的如有不当还请包涵指正。先谢过啦。1、@[:][/]和 @+[:][/], @android:id简单的概括就是:@[表示引用本应用...

weixin_33142377的博客 992

Android @ 注解

@注解 1.java.lang包下 //表明重写的是父类方法,检查方法名是否写错 @Override //被弃用的API,不赞成使用 @Deprecated //告诉编译器Lint,对警告保持静默 //deprecation 使用了不赞成使用的类或方法时的警告 //unchecked 执行了未检查的转换时的警告 //fa...

qq_39507260的博客 511

Android Studio 文件类型图标

Symbols Common Icon Description Class Abstract Java class Annotation Enumeration Exception Final Java class Interface Java class that contains decl...

WarmPure 5041

android studio 中要在app名称中添加&特殊符号

之前在给客户定制app中,客户定制好的app名称为xxxx & xxxx,使用到了特殊号 & 直接在string.xml文件中修改app的名称是编译不通过的,最后的做法是将 “&” 用 “& amp;”特换,主要“& amp;”不要有空格,我这里添加了一个空格,主要是为了显示的时候不转成“&”

tpyangqingyuan的专栏 3072

android中?号和@号的区别

在写布局文件的时候,我们经常用到@符号去引用资源,比如:@color/white @string/title_text @drawable/button_selector @mipmap/icon_launch @layout/header_layout @id/recyclerview @style/appTheme 但有时还会见到?,这是什么意思呢? 原来?一般是用来引用一个attr属性的,例

临江仙的技术文章 866

android中?和@的区别

可能平时使用style属性的时候会看到使用@和?两个符号,现在来说两者的区别 @是引用系统或自定义的资源,例如@drawable/ic_launcher ?则是用来引用系统主题属性的,?所指定的属性必须在系统主题中存在。系统主题是在android sdk中预定义的,例如设置ratingBar为小五角星风格的主题属性的代码为 style="?android:attr/ratingB

lintcgirl的博客 1156

Android的@和?

@和?都是用来引用其他已经定义好的资源的。@引用的是之前定义好的资源当前项目或者android的framework里。而?则是引用的当前加载的样式文件里。意思就是说你在xml里某行定义了一个资源,在下面某行需要引用这个资源时用?即可例:<android.support.v7.widget.Toolbar android:id="@+id/toolbar"

生活不止眼前的苟且 598
上一篇: Android 根据sql文件创建数据库并插入数据
下一篇: 开发直播的正常流程
deng_wei_csdn
博客等级 码龄10年 15粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值