将Android LayoutDirection设置为RTL并不总是有效

时间:2019-03-18 20:06:19

标签: android android-layout right-to-left android-layout-direction

我有一个Android应用程序,需要将整个应用程序的布局强制设置为RTL。我通过使用xml属性android:layoutDirection="rtl"来做到这一点。

一切正常,直到在我的一个活动中,我需要手动finish()并返回上一个活动,然后我手动将RTL方向强制打开的每个视图都还原返回LTR模式,直到我完全关闭应用程序并再次启动。

我正在BaseActivity中使用这段代码来强制使用目前为止运行良好的语言。

override fun onResume() {
    applyLang()
    super.onResume()
}
private fun applyLang() {
    val dm = resources.displayMetrics
    val conf = resources.configuration
    val locale = Locale(FA_LANG.toLowerCase())
    Locale.setDefault(locale)
    conf.setLocale(locale)
    resources.updateConfiguration(conf, dm)
}

注意: 我尝试将以下代码放入onCreate的{​​{1}}中无济于事:

BaseActivity

3 个答案:

答案 0 :(得分:0)

您是否尝试过将此android:supportsRtl="true"添加到清单文件中的<application>元素中?

答案 1 :(得分:0)

private RelativeLayout mRoot;

按如下所示初始化您的根布局对象变量:

活动中:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.yourLayout);

         mRoot= findViewById(R.id.message_single_layout);
    }

在片段中:

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    mRoot= (RelativeLayout) view;
}

在任何您想将根布局方向设置为rtl的地方(如果您的最小SKD至少为17)。 rtl表示从右到左

mRoot.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);

答案 2 :(得分:0)

将此添加到您的Styles.xml

        <item name="android:layoutDirection">rtl</item>