当前位置: 首页 > 知识库问答 >
问题:

为xml文件中的两个不同组件提供相同的ID Android

欧阳俊晖
2023-03-14

我在xml文件中使用了约束布局。我有一个类似例子中的视图。Imageview和textview。我希望这两个在点击后有相同的动作。怎么才能把两者组合在一起,给他们一个id?

xml:

<ImageView
                    android:id="@+id/menu_drawerLogout"
                    android:layout_width="30dp"
                    android:layout_height="30dp"
                    android:layout_marginStart="20dp"
                    android:layout_marginTop="8dp"
                    android:src="@drawable/ic_menu_exit"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/view6" />

                <TextView
                    android:id="@+id/menu_drawerLogout"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_marginStart="16dp"
                    android:layout_marginTop="17dp"
                    android:text="@string/sign_out_text"/>

共有2个答案

郭兴平
2023-03-14

XML布局资源文件中不能有两个id相同的组件。

如果您希望两者都具有相同的操作,请将公共<code>onClickListener</code>设置为两者相同,

XML

<ImageView
    android:id="@+id/imageView"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:layout_marginStart="20dp"
    android:layout_marginTop="8dp"
    android:src="@drawable/ic_menu_exit"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/view6" />

<TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginStart="16dp"
    android:layout_marginTop="17dp"
    android:text="@string/sign_out_text"/>

onCreate方法内部

ImageView imageView = findViewById(R.id.imageView);
TextView textView = findViewById(R.id.textView);

View.OnClickListener myListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // action
    }
});

imageView.setOnClickListener(myListener);
textView.setOnClickListener(myListener);

您可以将这两个视图放在一个容器中,然后为该容器设置一个< code>onClickListener

XML

<LinearLayout 
   android:id="@+id/container"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:orientation="vertical">
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_marginStart="20dp"
        android:layout_marginTop="8dp"
        android:src="@drawable/ic_menu_exit"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/view6" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginStart="16dp"
        android:layout_marginTop="17dp"
        android:text="@string/sign_out_text"/>
</LinearLayout>

在创建内部

LinearLayout layout = findViewById(R.id.container);

View.OnClickListener myListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // action
    }
});

layout.setOnClickListener(myListener);
韩志专
2023-03-14

考虑下面的代码:

        <TextView
            android:id="@+id/location"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="0dp"
            android:layout_marginTop="12dp" />

       <ImageView
           android:id="@+id/location"
           android:layout_width="70dp"
           android:layout_height="70dp"
           android:layout_marginStart="33dp"
           android:layout_marginTop="5dp"
           app:srcCompat="@drawable/openLoc" />

可以,但不推荐。设置ID时,元素可以通过ID轻松识别,如android:ID=“@ID/txtLocation”和android:ID=“@ID/imgLocation”。通过读取ID,可以轻松识别元素类型。您可以通过在开头添加布局名称,如android:ID=“@ID/profiletxtloction”,使识别更加容易。现在,这将有助于您的编码,因为自动完成功能将帮助您。只需键入布局名称,您将获得所有布局元素的列表,然后您将键入元素的类型。您将获得布局中所有要求元素的列表(es:TextView)。

 类似资料:
  • 我正在W3School页面中尝试一个简单的案例查询。 http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_groupby_2 当我运行下面的查询时,我总是为所有的范围值“over”。如果价格低于500,则应显示“under”。

  • 我正在将某些程序集打包到 msi 包中。在执行此操作时,我要求将一些程序集放入本地文件系统以及目标计算机的 GAC 中。众所周知,在这种情况下,重复文件表将无济于事。我决定将程序集放在具有不同标识符的 CAB 文件中两次。现在,为了填充组件表,我有不同的组件标识符,但我没有用于类似程序集的不同组件 GUID。我的问题是,如果我为具有不同组件标识符(在组件表中)的条目保持GUID(因为基本上程序集是

  • 我有两个文件命名为文章和类别。我使用SEO URL结构生成了一个URL格式。样品: 实例com/文章标题 实例com/类别标题 代码: 但有一个问题。我不能同时使用两种url格式。htaccess文件。他看到第一行,但忽略了另一行。但是我想对这两个文件使用相同的格式。你能帮忙吗?

  • 我有两个类,它们具有相同的类名并使用相同的包名。但是,这两个类文件位于不同的目录中。这两个类之间的另一个不同之处是,每个类中都有其他类中没有的方法。本质上,我想将这些方法拆分为两个使用相同名称但不同文件夹的单独文件。 理论上,我认为这是可能的,因为Java编译器在构建输出时确实维护了目录结构。所以在运行时,如果在类中调用了一个方法,Java可能会在任何一个文件中找到该方法。 这可能吗?我使用的是I

  • 我想创建一个包含所有价格选项的列表,并将唯一的值放在下拉列表中,所以我这样做: 此代码引发错误: 警告:遇到具有相同键的两个子项。键应该是唯一的,以便组件在更新时维护它们的标识。非唯一键可能导致重复和/或省略子键-此行为不受支持,并且可能在未来版本中更改。 从到 更新我也添加到它呈现的地方。 和SearchHandlerPrice:

  • 我有一个png非压缩文件(600KBytes),我正试图保存为JPG,以减少android应用程序的大小。 null null 谢谢你。