首页 > 解决方案 > 设置为 RTL 的 Android LayoutDirection 并不总是有效

问题描述

我有 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)
}

注意:我尝试将以下代码放入onCreatemyBaseActivity无济于事:

getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);

标签: androidandroid-layoutright-to-leftandroid-layout-direction

解决方案


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);


推荐阅读