getId()是否为不同布局中具有相似名称的视图返回唯一值?

时间:2017-05-11 19:19:34

标签: android android-view

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

例如,my_layout_one包含ID为view1的子视图,my_layout_two也是如此。

如果在view1上调用,getId()会返回相同的值,无论上述哪种布局被夸大了吗?

2 个答案:

答案 0 :(得分:1)

应用了View的每个idR.java类中都有一个对应的值,位于app/build/generated/source/r/debug/com/your/package目录。



    public final class R {

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

        }
    }


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

View#getId()除了从getId()类返回值外什么都不做。

回答你的问题 - 是的,{{1}}将返回相同的ID,无论这些布局中的哪一个被夸大。

答案 1 :(得分:0)

除了azizbekian's回答之外,我还想指出,当您使用setContentView()在任何活动中设置布局时,该布局会膨胀,因此所有顶级视图都会添加到活动。 这就是当您致电findViewById()时,它会从您的活动布局中返回视图,而不会在任何其他布局资源文件中返回任何其他具有相同ID的视图。

所以,显然当你打电话给view1.getID()时,它会返回view1 ID而不是view2。虽然它们具有相同的id,但android系统将只检查view1而不是view2,因为你只是要求它。