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