getId() return 是否是不同布局中类似命名视图的唯一值?

Does getId() return a unique value for similarly named views in different layouts?

我有几个不同的布局,每个布局都有在 xml 标记中具有相同视图 ID 的子项。

例如,my_layout_one 包含 ID 为 view1 的子视图,my_layout_two.

也是如此

如果在 view1 上调用 getId() return 是否会得到相同的值,而不管上述哪个布局被夸大了?

每个应用了 idView 在位于 app/build/generated/source/r/debug/com/your/package 目录的 R.java class 中都有相应的值。



    public final class R {

        public static final class id {
            ...
            public static final int view1 =0x7f0d007e;
            // other view's ids
            ...

        }
    }


无论您在不同的布局中声明了多少个不同的 View,假设它们在 R.java class 中应用了相同的 ID,所有这些在 R.java 中都将具有相同的值xml 布局。

View#getId() 除了 return 从 R.java class 获取值外什么都不做。

回答您的问题 - 是的,getId() 将 return 相同的 ID,无论这些布局中的哪一个被夸大了。

除了 回答之外,我还想指出,当您使用 setContentView() 在任何 activity 中设置布局时,该布局会膨胀,因此所有顶级视图已添加到 activity。 这就是为什么当您调用 findViewById() 时,它 return 是您 activity 布局中的视图,而不是任何其他布局资源文件中具有相同 ID 的任何其他视图。

所以,很明显,当您调用 view1.getID() 时,它会 return view1 ID 而不是 view2。尽管它们具有相同的 ID,但 android 系统将仅检查 view1 而不是 view2,因为您只要求这样做。