以编程方式重写supportsRtl清单属性

时间:2018-09-15 16:27:13

标签: android layout configuration right-to-left

有没有一种方法可以在Android的运行时设置/覆盖Manifest中的supports-RTL属性? 我希望能够以编程方式切换布局,而无需实际更改语言环境。 通过搜索,看来我必须为Application和每个活动设置布局方向。有没有更简单的解决方案?

1 个答案:

答案 0 :(得分:0)

更新

this answer,中,可以使用具有RTL布局方向的语言一次更改所有活动中的布局方向。答案将Farsi语言用于RTL。如果需要LTR,可以使用英语。

在调用onCreate之前,将以下代码放在启动器活动的方法setContentView中:

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

旧答案:

您可以获取每个活动中装饰视图的引用并设置其布局方向。

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

为简化此过程,请将上面的代码放入通用类onCreate的{​​{1}}方法中,该类扩展了BaseActivity并将所有活动用作其子类。