Android:以编程方式更改整个应用布局方向

如何将整个应用布局方向更改为RTL? 我正在编写一个应用程序,用户必须在首次启动时选择它的语言,并且布局应根据用户选择更改为RTL或保持LTR。 我曾经为AndroidManifest添加了android:supportsRtl="true" ,并为每个布局添加了android:layoutDirection="rtl" ,但这种方法存在如下问题:

一个问题是当我将方向更改为RTL时, ActionBar主页图标或导航按钮(当启用了主页时)仍然是LRT并且只是向右移动。

我也试图以编程方式改变方向,结果是一样的:

 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){ getWindows().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL); } 

在此处输入图像描述

有没有办法强制所有活动一次成为RTL,或者我们应该分别在每个活动中设定方向?

Solutions Collecting From Web of "Android:以编程方式更改整个应用布局方向"

在应用程序的minSdk> = 17时,您可以使用这段代码。

我用fa代替Farsi ,你可以使用其他rtl语言。

  Configuration configuration = getResources().getConfiguration(); configuration.setLayoutDirection(new Locale("fa")); getResources().updateConfiguration(configuration, getResources().getDisplayMetrics()); 

后退按钮保持LTR模式,因为它只有一个资源,即指向左侧的箭头。 您需要指定一个新的资源文件夹,例如drawable-ldrtl-hdpi,并将相同的图标放在此文件夹中。

我也有这个问题,我发现如果你的视图宽度设置为MATCH_PARENT ,你应该在LTR模型中用Gravity.LEFT设置视图的重力, Gravity.RIGHT在RTL模型中用Gravity.RIGHT设置视图的重力。

更改整个布局

  LinearLayout linrtl=(LinearLayout)findViewById(R.id.linrtl); linrtl.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);