Android Studio 更改一个 xml 文件中的 ID 会更改另一个文件中的 ID

Posted

技术标签:

【中文标题】Android Studio 更改一个 xml 文件中的 ID 会更改另一个文件中的 ID【英文标题】:Android Studio changing ID's in one xml file changes the ID's in another file 【发布时间】:2018-11-12 14:24:42 【问题描述】:

我曾经为 android 视图提供简单的 id,但最近因为这个问题我完全停止了。

假设我有 2 个布局,一个名为 first_layout.xml,第二个名为 second_layout.xml。在每个布局中,都有一个 ID 为 username_input 的视图。这个 id 用于不同的活动类来访问目标视图,无论是ButterKnife 绑定,Kotlin Android Extensions,甚至是findViewById

现在,无论出于何种原因,我只需要在一个布局中重命名 id。因此我做Refactor -> Rename。发生什么了? Android Studio 只是简单地替换了整个项目中的 id username_input,弄乱了其他具有相同 id 的布局。大多数人不会为项目中的每个视图都使用唯一的 id,因为它不是强制性的,但我这样做是因为我做了很多重构,而且很多时候我因为这个非项目中的上下文替换。

在这种情况下我有哪些选择?有没有办法让 Android Studio 在这种情况下进行上下文替换,或者我应该继续在我的项目中制作唯一的 id?

【问题讨论】:

不使用重构并进行简单的复制替换?鉴于大多数布局文件只在一个 Java 文件中直接使用,它几乎没有更多的努力。 @GabeSechan 1-2 个文件没有变化。例如,当在 xml 文件中包含通用布局时,它甚至可能涉及 10-15 个文件,并且手动更改所有这些? =/ Kotlin Android Extension在java类中也使用view的id作为引用名,如果代码中有很多对目标view执行的操作,可能会出现很多情况。 @xiniaz 然后你需要改进你的实现——如果你在十几个文件中引用布局的子字段,那么你应该将它转换为具有抽象接口的片段或复合视图所有这一切都是为了你。我会说,如果你在超过 1 中引用它,你应该这样做。 我建议将问题的名称更改为“在一个地方更改 id 在 android xml 文件中的其他地方更改 id” - 我很确定很多人会遇到这个问题。请在下面查看我的解决方法答案。 当您将一个布局复制到另一个布局并尝试重构新文件中的 id 时也会发生这种情况......它也倾向于重构源文件中的 id...... 【参考方案1】:

右击你想重命名的id去:

Refactor -> Rename

现在您将看到一个选项“Scope”,在 Scope 下,您需要选择“Current File”才能仅重命名该文件中的 id。 (不知道问这个问题时它是否在那里!)

【讨论】:

【参考方案2】:

当我将小部件从一个活动复制到另一个活动并尝试更改复制的小部件中的 ID 时,我也遇到了同样的问题。它提示一个对话框,我点击了“否(仅限本地)”。但是,我觉得这个选项没有用。它还在旧活动中更新了 ID。

解决方法:

尝试通过代码(文本编辑器)而不是设计来更改 ID 或属性。

我觉得谷歌应该解决这个问题并删除这个错误。

【讨论】:

【参考方案3】:

我刚刚看到这篇文章,因为我遇到了类似的问题。我有一个不同口味的应用程序。在我的一个布局中,我有 12 个按钮。在另一种风格中,我想要所有这些按钮,再加上我添加了 4 个。因此,我在特定于风味的目录中创建了一个新版本的布局。问题是每次我尝试更改 任何具有 ID 的内容时,都会更改主目录中同名的布局。

使用风味,您应该能够用风味特定的布局覆盖主目录的布局。这非常令人沮丧!

这必须是 Android Studio 中的错误。令人沮丧的部分是它仍然没有修复。因为我使用其他 JetBrains IDE,所以我通过 JetBrains 工具箱安装了 Android Studio。目前我使用的是 3.5.3 版

我的解决方法

为了解决这个错误,我创建了一个“测试”项目。我复制了我想要修改的布局代码,将其粘贴到测试项目中并在那里进行了编辑。当我按照我想要的方式完成更改后,我在我正在处理的实际项目的风味特定目录中创建了替代布局(使用与我想要覆盖的主目录布局相同的名称)。然后我从我的测试项目中复制了布局并将其粘贴到风味特定的文件中。通过这样做,它不会改变项目主目录中的布局。

我的想法

您不应该这样做。这当然不是直观的方式。这就是为什么我不能相信这只是一个错误。话虽如此,我希望我已经为其他陷入困境的人提供了一个明确的解决方法。如果我没有在下面发表评论,我会澄清我能做的。

【讨论】:

【参考方案4】:

不久前,我遇到了同样的问题,我发现这是 Android Studio 的预期行为,因为其他元素可能会受限于 ID 正在更改的元素。因此,您需要更新所有 ID,尤其是在新布局文件中通过其文本编辑器,而不是 从其设计编辑器的属性部分 它对我来说工作得很好,所以你也必须工作得很好:)

【讨论】:

我相信这不是预期的行为。如果这个 bug 也让您感到烦恼,请在此报告上标记星号:issuetracker.google.com/issues/141508081

以上是关于Android Studio 更改一个 xml 文件中的 ID 会更改另一个文件中的 ID的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Android Studio 在编辑 xml 文件或更改设计时会变慢?

更改 android studio 中的 textview 样式

android studio怎么更改应用的名字

如何在android studio中更改包名? [复制]

在 Android Studio 中更改项目主题?

2.4Android Studio使用主题编辑器设计主题