Home > Blockchain >  Giving the same id to two different components in an xml file Android
Giving the same id to two different components in an xml file Android

Time:08-30

I am using constraint layout in my xml file. I have a view like in the example. Imageview and textview. I want both of these to have the same action after clicking. How can I group the two together and give them an id?

enter image description here

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"/>

CodePudding user response:

Consider the code below:

        <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" />

You can but it is not recommended. Set ids in a way that elements can be easily identifiable by ID like android:id="@ id/txtLocation" android:id="@ id/imgLocation" it makes it easy to identify element type just by reading ID. You can make it even easier by appending layout name in beginning like android:id="@ id/profileTxtLocation". Now this will help you while coding as autocomplete feature will assist you. Just type layout name you will get the list of all layout elements, then you will type the kind of element you get the list of all asked elements(es: textViews) in layout.

CodePudding user response:

You can't have 2 components with the same id in an XML layout resource file.

Method 1

If you want both to have the same action set a common onClickListener to both like,

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"/>

inside onCreate method

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);

Method 2

You can put both the views in a container and then set a onClickListener to the container

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>

inside onCreate

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

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

layout.setOnClickListener(myListener);
  • Related