Android - 多次在RTL和LTR之间切换时布局方向错误

4
当我在应用程序运行时在EN和AR之间切换语言时,视图会正确地从LTR移动到RTL,但当我通过多次切换语言来开始应用程序的压力测试时,布局方向变得混乱,我会得到RTL元素,而应用程序应该显示LTR元素。有时候布局方向不再刷新。
作为解决方法,我必须以编程方式设置这些视图的布局方向。 `binding.spinner.setLayoutDirection(LocaleUtil.isRtl(this) ? View.LAYOUT_DIRECTION_RTL:View.LAYOUT_DIRECTION_LTR);`
请问您有任何想法吗?我正在尝试避免这种解决方法 :( 如果完全依赖于Android UI渲染是否可能。

你找到任何解决方案了吗? - maninder singh
2个回答

2

我无法想象一个用户会频繁切换语言并在每次更改后返回应用程序 :)

但是,无论如何,如果Android无法正确地重新创建您的活动,您始终可以通过为您的活动设置"android:configChanges"(位于AndroidManifest.xml中)并在这些活动中监听onConfigurationChanged(Configuration newConfig)方法来手动完成:

AndroidManifest.xml中:

<activity android:name=".MyActivity"
          android:configChanges="layoutDirection">

在您设置了android:configChangesActivity中:
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if (newConfig.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
        // change directions for you views to RTL
    } else {
        // change directions for you views to LTR
    }
}

谢谢你的建议,实际上它比我在onCreate方法中触发的解决方法更好...但它仍然以编程方式设置布局方向,而我正试图避免这种情况。无论如何,如果我找不到其他替代方案,我会接受你的答案 :) - abdelali eramli
不客气 :) 但是,说实话,我认为说服测试人员(或者你自己)这只是另一个 Android 的 bug 并且不做任何处理会更好更容易。因为这确实是一个 bug:在更改未在 configChanges 中设置的配置后,Android 必须根据新的配置重新创建活动和所有片段。这样做会更好,因为更多的解决方法 = 更奇怪的代码 = 您代码中更多的潜在错误(是的,是的,让测试人员开心%))。无论如何,祝你好运 :) - Alexander Bilchuk

1
请确认 supportsRtl="true"。
<application
    android:supportsRtl="true"
    android:name=".App"
    android:icon="@drawable/news"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">
</application>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接