如何动态有效地应用RTL

时间:2018-10-25 07:05:33

标签: java android android-layout textview right-to-left

每当我应用layoutAmount.setRotationY(180);时,我都会动态地在线性布局中创建和添加TextView,布局会更改正确的方向,但是其中的TextViews单词也会更改方向,例如,如果单词对不起,它变成了yrros,我该如何正确应用RTL

谢谢!

3 个答案:

答案 0 :(得分:2)

遵循以下方法使布局成为动态RTL的最佳方法,

如果您使用ConstraintLayout

请勿使用left and right

相反,请使用start and end

当您更改语言环境时,Android将动态更改布局

  

您可以找到关于如何通过语言环境更改应用语言的答案here

更新:

在ConstraintLayout中 将约束用作

    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toEndOf="@+id/imageView_about_back"
    app:layout_constraintTop_toTopOf="parent"

此外,请勿在左边或右边使用边距

对于LinearLayout,

  

使用gravity start and end

示例代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background_image"
    tools:context=".activity.HomeActivity">
  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="start"
    android:text="@string/about_al_ameen"
    android:textColor="@color/colorWhite" />
</LinearLayout>

答案 1 :(得分:2)

setLayoutDirection 将根据语言设置布局方向

-确保使用布局重力起点和终点

 public static void setLanguage(Context context, String language) {
            String[] localeLang = language.split("_");
            Locale locale;
            if (localeLang.length > 1)
                locale = new Locale(localeLang[0], localeLang[1]);
            else
                locale = new Locale(localeLang[0]);
            Locale.setDefault(locale);
            Configuration config = new Configuration();
            config.locale = locale;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                config.setLayoutDirection(locale);
                ((Activity) context).getWindow().getDecorView().setLayoutDirection(config.getLayoutDirection());
            }
            context.getResources().updateConfiguration(config,
                    context.getResources().getDisplayMetrics());
        }

答案 2 :(得分:1)

当您选择添加语言时;

LocaleHelper.setLocale(LAngSelect.this, "ar");

然后将其保存为sqlite或其他。

然后有意地转到MainActivity:

在MainActivity上保存语言并添加:

if (langs.equals("ar")) {
                    forceRTLIfSupported();
                }

    private void forceRTLIfSupported()
    {
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){

            //HERE CHECK CONDITION FOR YOUR LANGUAGE if it is AR then
            //change if it is english then don't

            getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);


        }
    }