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,或者我们应该分别在每个活动中设定方向?

  • 如何在webviewresize时将网页调整到webview的宽度(无需重新加载)
  • PhoneGap / Android - 锁定纵向方向
  • 自定义相机活动的Android图像方向问题
  • Android:纵向模式下的相机预览方向
  • 通过屏幕旋转保持GridView的滚动位置
  • Android的CameraInfo.orientation是否正确记录? 错误地实施了?
  • 更改方向,丢失所有列表项
  • 更改Bluestack的方向:纵向/横向模式
  • 在应用程序的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);