Android automirrored not working for Button Selector Drawable

697 Views Asked by At

I want a language support that is Right to Left. I have a button that has a text at start and arrow drawable at end. Arrow direction should be changed according to Locale selected. It works fine if i dont use selector as drawableEnd.

   <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/btn_send_otp"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:gravity="center_vertical"
        android:text="@string/get_started"
        android:drawableEnd="@drawable/sl_right_arrow"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

Button has following selector set as drawableEnd attribute

Selector Drawable (sl_right_arrow):

<?xml version="1.0" encoding="utf-8"?>
  <selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/orange_right" android:state_enabled="true" />
  <item android:drawable="@drawable/arrow_right_grey" android:state_enabled="false" />
</selector>

Drawables has android:autoMirrored="true". So if I use these drawables without selector like following

android:drawableEnd="@drawable/arrow_right_grey"

it works fine and arrow changes its direction according to Locale selected. But it does not work with selector.

Following are drawables:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="@dimen/sdp_15"
android:height="@dimen/sdp_12"
android:autoMirrored="true"
android:viewportWidth="18"
android:viewportHeight="14">
<path
    android:fillColor="#00000000"
    android:pathData="M1.5,7L16.5,7"
    android:strokeWidth="1.5"
    android:strokeColor="#A8A8A8"
    android:strokeLineCap="round"
    android:strokeLineJoin="round" />
<path
    android:fillColor="#00000000"
    android:pathData="M10.7623,1L16.5,7L10.7623,13"
    android:strokeWidth="1.5"
    android:strokeColor="#A8A8A8"
    android:strokeLineCap="round"
    android:strokeLineJoin="round" />
</vector>
1

There are 1 best solutions below

0
On

change your selector file to the following

<?xml version="1.0" encoding="utf-8"?>
  <selector xmlns:android="http://schemas.android.com/apk/res/android" android:autoMirrored="true">
  <item android:drawable="@drawable/orange_right" android:state_enabled="true" />
  <item android:drawable="@drawable/arrow_right_grey" android:state_enabled="false" />
</selector>