【Android开发细节】之【@id与@+id区别】

Pico VR开发入门:App ID配置与Unity集成全流程解析 在VR应用开发中,SDK集成与设备授权是确保应用功能完整性的基础环节。其核心原理在于通过唯一的应用标识符,实现系统层面对硬件资源与原生API的访问授权。这一机制的技术价值在于保障了应用生态的安全性与可控性,防止未授权调用导致的功能异常或系统冲突。在Pico VR等移动VR平台开发实践中,App ID正是扮演了这一关键角色,它串联起开发者后台、Unity工程与真机设备,是调用手柄追踪、透视模式等核心功能的通行证。正确配置App ID,能有效避免应用在真机测试时出现闪退或功能残缺等常见问题,是VR开发流程中不可 阅读详情
大家都知道,在Layout布局文件中android:id="@+id/xxx"是为一个控件指定ID值,但是我要讨论的不是这个,我要讲的是@id与@+id在引用其它控件时的区别,先来看看下面的代码:
<div>
</div><div>
</div><div>
</div><div><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    
       <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/textview1" />
    
    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/textView1"
        android:text="@string/textview2" />
    
</RelativeLayout></div>


很简单,TextView1会显示在TextView2上面,效果:


效果如上。可这就是我要说的重点吗?!呵呵,当然不是。我要说的是:现在我把上面的代码改一点,改成:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/textview1" />
    
      <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        <span style="color:#ff0000;">android:layout_below="@+id/textView1"</span>
        android:text="@string/textview2" />
    
</RelativeLayout>


唯一的不同就是处处都不同。。。。。。。
我这里就改了一个位置把原来的【android:layout_below="@id/textView1"】改成了【android:layout_below="@+id/textView1"】,额,就多了一个“+”号,那么问题来了,不是在给一个控件声明id值得时候才用“+”号吗,为什么这里也可以用“+”号,而且没有报错呢???
好的,那么恭喜你,终于知道我要说的是什么了。(好吧,其实我也没想出一个我要说什么的具体名字)

那么我就换一种写法,你可能就明白其中为什么用“+”了,不过在换之前,我们还是把上面第二次出现的代码块从脑海中删去,只留下第一次代码块在脑海中。我们要换的代码就是将第一次贴出来的代码里面的两个TextView的顺序交换一下。下面看代码:
<span style="font-size:14px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    
    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/textView1"
        android:text="@string/textview2" />
    
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/textview1" />
    
</RelativeLayout></span><span style="font-size: 24px;">
</span>

你也许会觉得,好像也没什么不对呀。别急,我把eclipse的代码截图给你看看:


大家可以看到,这时候,们将TextView1的代码放在TextView2的下面,而我们要实现的效果确是让TextView2显示在TextView1的下面,此时,通过“@ID/xxxx”的方式,按理说因该可以的,而事实上确是报错惊讶,那么这时候,我们再换一种写法,看代码:

我们把上面的控件中对另一个控件的引用中添加一个“+”号,顿时,大喜,有木有。这就恍然大悟为什么可以对ID值进行带“+”号的引用了。这时候再回看第二次贴出的代码,其实这里要不要那个“+”号都没所谓的,不过,当换一个代码的编写顺序,效果就不一样了。这也就解释了报错的原因咯。好吧,还不知道我就直接挑明了说吧:在XML的Layout布局文件中,代码中先写出的控件要引用代码中后写出的控件的时候,其引用中应该添加“+”号,告知该控件这个ID值对应的控件确实存在。

好吧,我的高考语文没及格,语言组织的不好,不过我觉得大体上还是能读懂的,基本上就是这个意思。
<div>
</div><div>
</div><div>
</div><div><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    
       <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/textview1" />
    
    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/textView1"
        android:text="@string/textview2" />
    
</RelativeLayout></div>
Android开发:在IDEA中高效配置SDK与调试环境 本文详细介绍了在IntelliJ IDEA中高效配置Android SDK与调试环境的完整指南。从JDK安装、SDK配置到Gradle优化,涵盖了Android开发环境搭建的全流程,并提供了真机调试、模拟器使用等实用技巧,帮助开发者提升Android应用开发效率。 阅读详情

相关推荐

安卓FPS+RPG+生存融合游戏开发:Unity多系统整合与手柄支持实战

如果你是一名安卓手游开发者,或者正在寻找一个能同时满足“硬核射击”和“深度角色扮演”需求的游戏项目,那么《太阳天堂的钥匙》v0.9.9版本的出现,可能标志着一个值得你投入时间研究的新方向。在移动端FPS(第一人称射击)游戏早已被《使命召唤手游》、《和平精英》等巨头占据的今天,一款新游戏凭什么能吸引玩家?答案往往不是更炫的画面或更快的节奏,而是 玩法融合的深度 与 操作体验的革新 。 《太阳天堂的钥匙》正是这样一款产品:它将自己定位为一款“融合了RPG元素的硬核末日生存题材第一人称射击游戏”。这个描述本身就包

weixin_33866037的博客 1169

Android 开发之布局细节对比:RTL模式

前言讲真,好久没写博客了,2016都过了一半了,赶紧重新捡起来。(个人感慨,和内容无关…… 所谓RTL,顾名思义也就是Right To Left,是一种阿拉伯语、波斯语等情况下从右往左的阅读方式。当所开发的App等面向海外用户时需要做这个适配。从Android 4.2开始支持原生的RTL模式,对此之前的版本我也不想多做说明,这些老版本要是还支持那Android碎片化就没完没了了。正文如何查看效果首先

nomasp 1万+

分辨率太小 / Retina 模糊 / 全屏异常:一篇解决 VMware Fusion + Kali 显示问题(Xfce & GNOME 通用)

本文提供了在Mac(尤其是Retina屏)上运行Kali Linux时常见显示问题的完整解决方案。主要解决三类问题:分辨率太小、Retina屏模糊和全屏异常。核心思路是先安装open-vm-tools-desktop并重启,这是90%问题的根源。然后根据不同问题分别处理:调整DPI/Scale解决字体大小,避免双重缩放导致的模糊,以及通过窗口拉伸和重启解决全屏异常。文章还给出了针对Xfce和GNOME的最佳配置建议,并强调调试完成后应创建快照以便快速恢复。最后提供了速查表,方便用户快速参考关键步骤。

致力于分享在各类技术领域的学习与实践经验,涵盖编程、虚拟化、开源工具、网络安全等。 874

Android Studio报错Cannot resolve symbol ‘@+id/xxxx‘解决方法

Android Studio报错Cannot resolve symbol ‘@+id/xxxx'解决方法。不能解析id

记录分享编程与冲浪知识 4169

开源ISP介绍(1)——开源ISP的Vivado框架搭建

ZYNQ视频图像处理系统,ISP图像处理硬件实现

路漫漫其修远兮,吾将上下而求索 3288

有关SPSS中Fisher精确检验无法进行的解决方法(由于无法打开临时文件,因此无法进行计算)

最近在帮一个四年生完成她的毕业论文,在用SPSS进行R×C表检验的时候,发现Fisher精确检验的结果无法显示,提示为“由于无法打开临时文件,因此无法进行计算”,大概像下图一样。 (这图是从网上找的) 然...

chuyang37的博客 3万+

软件android_id,Android中@id和@+id及@android:id的区别介绍

前言昨天突然有新来的同事问我这个@id 和@+id 的区别 ,为什么 我们的项目都是@id 自己新增的ui 使用的@+id这里说下我的简单的回复项目是维护的之前的是为了统一管理使用了@id 方便修改 ,因为在ids.xml 里面有引用,@+id 是新增了,没有那样写,感觉有点麻烦,不过为了统一最后自己又修改为了@id,可能这些说的有些模糊 ,下面是自己整理的一些知识,方便查找首先我们需要知道我们...

weixin_42703843的博客 2313

模型可解释性分析:基于SHAP的深度探索

SHAP模型可解释性分析摘要 本文系统性地介绍了SHAP(SHapley Additive exPlanations)方法在机器学习模型可解释性分析中的应用。SHAP基于博弈论的Shapley值理论,为特征重要性评估提供了统一框架。文章详细阐述了四种核心算法:Kernel SHAP(模型无关方法)、Tree SHAP(针对树模型的高效算法)、Deep SHAP(适用于深度学习)和Linear SHAP(线性模型专用)。通过Python实现展示了从数据准备到SHAP分析的全流程,包括摘要图、依赖图等可视化技术

huanghm88的专栏 611

Android studio 小记:ID属性

简单来讲: @+id 新增一个资源id @id和android:id,引用现有的资源id Android中的组件需要用一个int类型的值来表示,这个值就是组件标签中的id属性值。 id属性只能接受资源类型的值,也就是必须以@开头的值,例如,@id/abc、@+id/xyz等。 如果在@后面使用“+”,表示当修改完某个布局文件并保存后,系统会自动在R.java文件中 生成相应的int类型变量。变量名...

冰淇淋甜筒 4876

40.8K星爆火!Crawl4AI实战突破Cloudflare 5秒盾:AI反爬新范式,爬虫再也不被封

Crawl4AI的爆火(40.8K星)不是偶然——它解决了爬虫工程师最头疼的反爬问题,让爬虫从“体力活”变成“脑力活”,不用再花费大量时间配置指纹、编写行为脚本。但要注意:爬虫必须遵守目标网站的robots.txt协议,不得用于非法爬取数据(比如用户隐私、商业机密)。合理使用技术,才能长久落地。如果你在使用Crawl4AI时遇到具体问题(比如绕过更严格的反爬、批量爬取配置),欢迎在评论区交流,我会第一时间分享解决方案!

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1603

Android面试指南及参考答案

【摘要】LesPark招聘Android开发工程师,要求3年以上经验,负责客户端功能开发与优化。岗位需掌握Java、多线程、网络编程(TCP/UDP/HTTP)及性能调试工具。面试重点考察:1)核心技术如网络协议选择(TCP可靠消息/UDP实时音视频)、内存泄漏分析;2)业务能力如图片懒加载三级缓存设计、启动速度优化案例;3)高阶系统原理如插件化框架设计;4)行为问题应对策略。建议候选人准备并发编程、JVM差异等深度知识,并量化项目优化成果,尤其关注社交应用相关的图片处理、实时通信等场景题。

郑伟强dev的专栏 804

[Android]Android布局文件中的android:id="@*"属性使用方法汇总以及介绍

由于项目需要进行Android开发,因此一边开发,一边查阅资料,一边总结了Android布局文件中android:id="@*"属性的使用方法汇总以及介绍。id资源的引用 android:id="@*"属性主要分为三种: android:id="@+id/new_name"  android:id="@id/defined_name"  android:id="

Fantasy Dancer 6147

Xilinx FPGA平台GTX简易使用教程(一)GTX基础知识

理解GTX的必备姿势,学起来!

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 2万+

安卓中@+id 与 @id的区别

号,则可能会出现编译错误或者运行时错误。因为此时系统会认为这是一个已经存在的标识符,如果它在资源池中不存在,则会导致找不到该视图控件,从而引发异常。当我们需要在 Java 代码中引用一个已经存在的标识符时,则可以使用。,用于标识这个按钮控件。当系统解析该 XML 文件时,会将。都用于定义视图控件的唯一标识符。需要注意的是,在 XML 布局文件中,如果我们误用了。表示我们要定义一个新的标识符,并将其命名为。加入到资源池中,以便后续的代码可以引用它。具体来说,我们通常在 XML 布局文件中。

开挂的熊猫 1886

DO-297标准详解:IMA系统开发与认证指南

DO-297的前言部分为读者提供了本指南的概述,说明了该标准的编写背景、主要目标、目标受众以及该文件在开发和认证集成模块化航空电子(IMA,Integrated Modular Avionics)系统中的作用。作为现代航空电子架构的重要组成部分,IMA系统大幅度简化了航空电子系统的硬件配置,增加了灵活性并降低了成本。因此,DO-297成为确保IMA系统开发、集成和认证符合适航标准的核心文件。在现代航空领域,系统复杂性逐渐增加,传统上各子系统独立运行的方式已经不适应多任务、多功能的需求。

qq_41854911的博客 1584

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Android XML 布局基础(二)ID 用法

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。最后对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,:表示这是一个新的资源名称,必须创建该名称并将其添加到资源 (,由于篇幅有限,这里以图片的形式给大家展示一部分。名称,如果存在相同的名称会覆盖之前的名称。字符串的其余部分,并将其标识为。资源,如果不存在,则会编译报错。时,不需要加号,但必须添加。

2401_84123294的博客 800

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Android开发细节——开发实战过程中遇到的细节问题与解决方案汇总

获取系统时间的24小时制与12小时制 最近在做项目的时候发生了一点错误,服务器端是24小时制的时间,而本地数据库则是12小时制的时间 1、获取24小时制的时间 public static String showDate() { SimpleDateFormat sDateFormat = new SimpleDateFormat(&amp;amp;amp;quot;yyyy-MM-dd HH:mm:ss&amp;amp;amp;quot;); ...

点击置顶文章查看博客目录(全站式导航) 6394

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

安卓android+WebSocket实现简易QQ聊天室

本篇介绍前端是安卓的聊天室的实现方法,后端的实现看链接说明 链接说明 1.后端使用了spring boot 框架,有关spring boot 入门请戳此链接使用Intellij IDEA开发第一个spring boot项目 2.websocket后端实现细节戳此链接 界面展示 说明 有两个界面,第一个是登陆界面,我借用了我之前实现的登陆界面,并做了一些微调。需要输入ID和名字,测试的时候输入的ID...

baidu_41860619的博客 3101

Android开发 LiveData与MutableLiveData详解

Android开发 LiveData与MutableLiveData详解 前言   LiveData与ViewMode是经常搭配在一起使用的,但是为了不太混乱,我还是拆分开来说明,此篇博客只讲解 LiveData 与MutableLiveData的概念与使用方式...

weixin_30950237的博客 1606

Android中的UI细节

1、让一张图片与一行文字上下居中对齐,可以对图片设置alignTop 和 alignBottom于文字,但要保证图片的高度小于文字,否则会被压缩。 2、EditText好用的属性:maxLength(设置最多输入多少个字符,在代码中动态设置时需要使用一个过滤器,没有很直接的set方法) editText.se

china199225的博客 447

Android开发必学:组件化与插件化的差别在哪里?成功收获美团,小米安卓offer

开头 最近发现一些读者,留言提到跳槽面试的事情。当中,有几个编程老兵,说他们从事Android 开发多年,薪资却还在原地打转,跳槽升职不是很顺利,十分困惑。这显然是遇到瓶颈期。 就目前大环境来看,今年跳槽成功的难度的确比往年要高。一个明显的感受:今年的面试,无论一面还是二面,都很考验Android程序员的技术沉淀。 近期这里搜集了近 100 套阿里、腾讯、美团、网易等公司2019 年的面试题,把技术点梳理成一份大而全的“Android 架构师”面试题(实际上比预期多花了不少精力),包含知识脉络 + 分支细节

m0_52308677的博客 546

从Android Contacts应用看CursorLoader——Contacts篇

从Android  Contacts应用看CursorLoader——Contacts篇

大叔的愤怒,你驾驭不了 1731

深入理解安卓HAL层:硬件抽象层开发与驱动适配指南

安卓硬件抽象层(HAL)是连接系统框架与硬件驱动的关键纽带,它为安卓系统提供了标准化的硬件访问接口,同时保护硬件厂商的知识产权。本文将从架构解析、开发实践到驱动适配,全面讲解HAL层的核心技术与应用方法,帮助开发者快速掌握安卓硬件抽象层的开发精髓。 ## 一、安卓HAL层的核心架构与作用 安卓系统架构中,HAL层位于Linux内核与框架层之间,扮演着"翻译官"的角色。它将硬件厂商的私有驱动实现

gitblog_00525的博客 433

集合:安卓开发中怎么注意细节?一文告诉你四十个

1.全部Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有效。 2.数据库表段字段常量和SQL逻辑分离,更清晰,建议使用Lite系列框架LiteOrm库,超级清晰且重心可以放在业务上不用关心数据库细节。 3.全局变量放全局类中,模块私有放自己的管理类中,让常量清晰且集中. 4.不要相信庞大的管理类的东西会带来...

Aerfa789的博客 375

Camera Id(slotId,physicalCameraId,logicalCameraId,frameworkCameraId)的区别

Framework Camera Id 则是在 CameraX 这样的抽象层级上使用的标识符,它简化了相机操作,并提供了跨设备一致的 API 接口。Logical Camera Id 提供了一个更高级别的抽象,可以组合和管理多个物理相机设备,使得应用程序可以更灵活地利用多摄像头的功能。Slot Id 和 Physical Camera Id 是基于硬件实际存在的物理相机设备的标识符,用于直接控制和操作相机硬件。定义:Physical Camera Id 是用于标识每个物理相机设备的唯一字符串标识符。

qq_36690194的博客 1515

腾讯移动客户端开发面试,面试字节跳动Android开发岗还不会这些问题,android插件化

当我们往HashMap中put元素的时候,先根据key的hashCode重新计算hash值,根据hash值得到这个元素在数组中的位置(即下标),如果数组该位置上已经存放有其他元素了,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放在链尾。sleep的作用是让线程休眠制定的时间,在时间到达时恢复,也就是说sleep将在接到时间到达事件事恢复线程执行。软引用:在使用软引用时,如果内存的空间足够,软引用就能继续被使用,而不会被垃圾回收器回收,只有在内存不足时,软引用才会被垃圾回收器回收。

2401_84023579的博客 7474
下一篇: 【Java】监听器的理解和开发
Microanswer
博客等级 码龄10年 38粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值