@ + android:id有合法用途吗?

时间:2014-10-27 15:35:19

标签: android xml android-5.0-lollipop android-identifiers

将我的Android工具升级到最新版本以使用 API21 后,尝试编译我的项目会导致以下错误:

  
      
  • update_languages_button_preference_layout.xml:2:注意:您的意思是使用 @ + id 而不是 @ + android:id
  •   
  • update_languages_button_preference_layout.xml:2:错误:为外部包android创建资源:id / layout。
  •   
  • update_languages_button_preference_layout.xml:2:错误:错误:找不到与给定名称匹配的资源(在'id'处,值为'@ + android:id / layout')。
  •   

问题似乎是android:id="@+android:id/layout"行:用 @ + id 替换 @ + android:id 就足以编译并运行正常投射。

然而,通过整个代码库的快速搜索揭示了项目中使用构造android:id="@+android:id/...的一些其他位置。这些显然并没有阻止该项目通过所有测试,即使我无法保证它们仍在使用中。

  • 是否合法使用android:id="@+android:id可以将这些引用留在我们的xml文件中,而不是全部用@+id替换它们?

  • 为什么他们没有提出与第一个文件相同的错误?

2 个答案:

答案 0 :(得分:3)

不,你应该从不在你的应用中使用@ + android:id。 android命名空间是为框架保留的。这对应用程序来说从未安全使用,现在会生成编译错误。

对于一些小背景,在android命名空间中生成新ID会将它们放在现有android命名空间ID之后的未使用空间中。这将在框架中添加新ID之前正常工作,此时您的内部ID将与实际框架ID重叠并导致奇怪的问题。

至于其他情况,那些也应该产生错误。 AAPT中可能存在错误。无论如何,你应该从你的资源中删除@ + android的所有实例。

答案 1 :(得分:3)

虽然我的评论很晚。我今天遇到了同样的问题,更新了我的日食和工具。将 @ + android:id 更改为 @ + id ,它解决了我的问题。