视图ID的整数值在android中是不是始终不变?

Posted

技术标签:

【中文标题】视图ID的整数值在android中是不是始终不变?【英文标题】:Are integer value of view IDs are always constant in android?视图ID的整数值在android中是否始终不变? 【发布时间】:2021-03-05 04:29:07 【问题描述】:

R.id.view 的 int 值是否始终相同?


我试过在两台设备上打印,结果都一样。 我也更改了 id 的名称,但值仍然相同。

但它会在所有情况下都保持不变吗?

【问题讨论】:

【参考方案1】:

对于任何特定的应用程序资源,与特定 R 类相关的资源 ID 在运行时期间的所有场景中都是相同的,因为此资源 ID 是由 aapt 在编译时生成的。

来自android Documentation:

在应用程序中提供资源后,您可以通过引用其资源 ID 来应用它。所有资源 ID 都在 aapt 工具自动生成的项目的 R 类中定义。当你的应用程序被编译时,aapt 会生成 R 类,其中包含你 res/ 目录中所有资源的资源 ID。

因此,如果使用相同的 apk,在两个设备上打印它会产生相同的 int 值。另请注意,resource id is final 在各自的R 子类中。

来自answer:

请注意,默认情况下 aapt 不会尝试保留这些标识符 构建之间相同。每次资源变化时,它们都可以 获取新的标识符。每次构建它们时,都会创建一个新的 R.java 使用当前标识符,以便您的代码获得正确的值。 因此,您绝不能在任何地方保留资源标识符 它们可以在您应用的不同版本中使用。

对资源的任何更改都可能使资源获得新的 R 类资源 ID。

基于R类资源ID的计算方式,如answer中所述,我认为因为您只更改了XML资源ID的名称,并没有更改资源的类型或在各自的 XML 文件中放置各自的 View 对象声明,正在计算相同的 R 类资源 ID。

【讨论】:

【参考方案2】:

在编译期间会生成一个 View ID,因此如果 APK 相同,则每个 Device 中的 ID 都将相同。注意“不同的编译会产生不同的ID”。

【讨论】:

以上是关于视图ID的整数值在android中是不是始终不变?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android Java 中将 Color.RED 代码转换为颜色的整数值? [复制]

不断收到此错误-不正确的整数值:第 1 行的列 'poi_id' 的'')[关闭]

不正确的整数值:''对于第1行的列'id'

为啥 ColdFusion 认为值“7+”是一个有效的整数值,我如何验证它不是?

python id()函数

Google 是不是始终保留 GCM 注册 ID?