5

Jak wiesz, Vector Drawables został dodany do biblioteki wsparcia Android 23.2, która ogłosiła w Android Developer Blog, że dla wszystkich wersji Androida możemy go użyć zamiast dodawać dodatkowe ikony w różnych rozmiary. Jednak opcja "włącz automatyczne tworzenie kopii lustrzanej dla układu RTL" nie działa w wersji Android poniżej wersji 6.0! Czy jest jakieś dodatkowe ustawienie, aby użyć go w innych wersjach Androida?Automatyczne tworzenie kopii lustrzanych dla układu RTL nie działa w wersjach Androida poniżej 6.0

enter image description here

Moja Test Project wykorzystuje prostą metodę zmiany Locale mojego wniosku. Są to wyniki mojego testu:

Nexus 6P z Android 6.0, który działa Nicea:

enter image description here enter image description here

Nexus 7 z Androidem 5.0:

enter image description here enter image description here

Dzięki

+0

każda odpowiedź proszę? –

+0

@mostafahashim Niestety, wygląda na to, że ta funkcja nie działa w wersji Android poniżej 6.0. Używam różnych 'mipmap' w folderach' mipmap' i 'mipmap-ldrtl', ponieważ każda z ikon musi być zgodna z lokalną. W przypadku innych ikon używam 'VectorDrawable'. – Nava

Odpowiedz

0

Bug Zgłoszone: link

Odwróć wektor rozciągliwej jeśli lokalny jest arabski i odkształcalne jest auto lustro

public static Drawable getDrawableLocale(Activity activity, @DrawableRes int drawableResId) { 
     if (!Util.isRTL() || !ResourcesCompat.getDrawable(activity.getResources(), R.drawable.ic_back_white, null).isAutoMirrored()) 
      return ResourcesCompat.getDrawable(activity.getResources(), R.drawable.ic_back_white, null); 
     /** 
     * Flip it for RTl because Kitkat doesn't flip 
     */ 
     Bitmap bitmap = Util.getBitmapFromVectorDrawable(activity, drawableResId); 
     Matrix matrix = new Matrix(); 
     matrix.preScale(-1.0f, 1.0f); 
     bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); 
     return new BitmapDrawable(activity.getResources(), bitmap); 
    } 

public static Bitmap getBitmapFromVectorDrawable(Context context, int drawableId) { 
    Drawable drawable = getVectorDrawable(context, drawableId); 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 
     drawable = (DrawableCompat.wrap(drawable)).mutate(); 
    } 

    Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), 
      drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); 
    drawable.draw(canvas); 

    return bitmap; 
} 
public static Drawable getVectorDrawable(Context context, @DrawableRes int idVectorDrawable) { 
     return AppCompatDrawableManager.get().getDrawable(context, idVectorDrawable); 
    } 


public static boolean isRTL() { 
     return isRTL(Locale.getDefault()); 
    } 
public static boolean isRTL(Locale locale) { 
    final int directionality = Character.getDirectionality(locale.getDisplayName().charAt(0)); 
    return directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT || 
      directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC; 
} 
0

można użyć tworzyć własne ImageView a jeśli perski Rotate 180.