这个documentation总是让我感到困惑:
<TextView android:id="@+id/nameTextbox"/>
我已经编程了一段时间了。但是,我从未遇到过必须使用不带加号的ID声明的情况。这也是违反直觉的。 ID应该是唯一的!
有什么好的用例吗?为什么要重复使用相同的资源ID名称?
最佳答案
首先
当我们第一次(从上到下)在特定xml文件中引用ID时,而不是在首次创建ID时,我们使用 + 。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/another_button"
android:layout_alignParentTop="true"
android:text="@string/button" />
<Button
android:id="@id/another_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="@string/another_button" />
</RelativeLayout>
其次是
当某人正在使用 RelativeLayout 或 ConstraintLayout 即某些相对父 View 时,他们需要多次使用相同的 id 来定义 Activity 或 Activity 中的某些 View 等。
第三,
加号(+)表示这是一个新的资源名称,必须创建该资源并将其添加到我们的资源中(在R.java文件中)。
因此,每次我们使用@ + id/some_id时,它都会触发针对同一 View 的新资源引用的创建,即冗余。
示例(用于第二个用例)
<RelativeLayout
android:id="@+id/final_order_activity_order_rl"
android:layout_margin="5dp"
android:background="@drawable/gradient_for_btns"
android:paddingBottom="8dp"
android:paddingTop="8dp"
android:paddingStart="4dp"
android:paddingEnd="4dp"
android:layout_alignParentBottom="true"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_centerInParent="true"
android:layout_marginStart="8dp"
android:textStyle="bold"
android:textSize="18dp"
android:text="$2000"
android:textColor="@android:color/white"
android:maxLines="1"
android:layout_toLeftOf="@+id/final_order_activity_place_order_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/final_order_activity_total_tv" />
<Button
android:paddingStart="6dp"
android:paddingEnd="6dp"
android:layout_marginEnd="8dp"
android:text="Place Order"
android:background="@drawable/ripple_effect"
android:textColor="@color/baseColorBright"
android:layout_alignParentEnd="true"
android:layout_width="wrap_content"
android:layout_height="28dp"
android:id="@id/final_order_activity_place_order_btn"/>
</RelativeLayout>