当设备语言改变时,设备的默认布局方向改变应用程序的默认布局方向

Device's default layout direction changes application's default layout direction when device language is changed

最近我收到来自用户的关于应用程序布局方向被打乱并且显示不正确的报告。

我在 style.xml 中做了所有方向 ltr,但一些用户更改了 phone 语言 。作为结果,设备默认布局方向改变并导致应用程序方向反转。(但我不想)

ltr 更改为 rtl

rtl 更改为 ltr

我的假设是,如果我在 style.xml 中设置静态布局方向,布局永远不会改变它的方向,但它不起作用,方向是 changed.what 我必须这样做?如何防止布局方向改变?

试试这个

 android:supportsRtl="false"

<application> 标签内的 manifest.xml 中设置这个

以下是如何在您的活动中强制执行 LTR。

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

例如:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:layoutDirection">ltr</item>
</style>

您也可以直接在布局中使用它,并在一个视图上组合不同的方向。

android:layoutDirection="rtl"

例如:

<LinearLayout android:id="@+id/layout_linearlayout_rtl"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layoutDirection="rtl">

        <LinearLayout android:id="@+id/layout_linearlayout_rtl_child_1"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:layoutDirection="ltr" />

        <LinearLayout android:id="@+id/layout_linearlayout_rtl_child_2"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:layoutDirection="rtl" />

        <LinearLayout android:id="@+id/layout_linearlayout_rtl_child_3"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:layoutDirection="inherit" />

        <LinearLayout android:id="@+id/layout_linearlayout_rtl_child_4"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:layoutDirection="locale" />

</LinearLayout>

从API17.

开始就可以使用了

希望对您有所帮助