RTL布局的自动镜像在6.0以下的Android版本中不起作用

时间:2016-08-01 15:01:05

标签: android android-layout android-support-library vector-graphics android-vectordrawable

如你所知,Vector Drawables是在Android支持库23.2中添加的,它在Android Developer Blog中宣布,对于所有版本的android,我们可以使用它而不是添加不同大小的额外图标。 但是,“为RTL布局启用自动镜像”选项在6.0以下的Android版本中不起作用!是否有其他设置在其他Android版本中使用它?

enter image description here

我的测试项目使用一种简单的方法来更改我的应用程序的区域设置。 这些是我的测试结果:

使用Android 6.0的Nexus 6P效果很好:

enter image description here enter image description here

使用Android 5.0的Nexus 7:

enter image description here enter image description here

由于

2 个答案:

答案 0 :(得分:0)

错误报告:link

翻转矢量drawable如果local是arabic而drawable是自动镜像

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

答案 1 :(得分:0)

你可以使用创建自定义ImageView,如果波斯旋转180.