使用android时禁用自动更改布局方向:supportsRTL=";“真的”;

使用android时禁用自动更改布局方向:supportsRTL=";“真的”;,android,android-layout,multiple-languages,rtl-language,Android,Android Layout,Multiple Languages,Rtl Language,我的应用程序将来必须同时支持RTL和LTR语言,但目前只支持RTL。当我在每个布局中使用android:supportsRTL=“true”和android:layoutDirection=“end”时,导航视图和工具栏以及其他一切都很好 但唯一的问题是,当用户将系统语言更改为LTR语言时,由于布局方向的改变,一切都会出错 我需要什么:我必须设置supportsRTL:“true”。当用户在启动时选择“应用程序”语言而不是根据操作系统语言时,我需要以编程方式更改布局方向 问题:有没有办法通过更改

我的应用程序将来必须同时支持RTL和LTR语言,但目前只支持RTL。当我在每个布局中使用
android:supportsRTL=“true”
android:layoutDirection=“end”
时,导航视图和工具栏以及其他一切都很好

但唯一的问题是,当用户将系统语言更改为LTR语言时,由于布局方向的改变,一切都会出错

我需要什么:我必须设置supportsRTL:“true”。当用户在启动时选择“应用程序”语言而不是根据操作系统语言时,我需要以编程方式更改布局方向

问题:有没有办法通过更改操作系统语言(而不是将supportsRTL设置为false)来防止自动更改布局方向

见下图:

如果我设置android:supportRTL=“false”并只为RTL设计布局,工具栏和导航的菜单方向将是我的新麻烦

见下图:


已解决。这只是一个小小的可怕的错误

但对于任何有类似问题的人来说,我在android版本17或更高版本上的这一功能将非常有效,对于17岁之前的版本,我认为唯一的方法是对RTL和LTR使用单独的布局

如果您必须在清单中使用android:supportsRTL=“true”,则:
1。如果只支持RTL语言,要防止根据操作系统语言更改方向,请执行以下操作: 只需将
android:layoutDirection=“rtl”
添加到所有布局的父级(也可以在
styles.xml
中使用主题)。 或者创建一个子活动并从中扩展所有活动,然后将此代码放入其onCreate中:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        Configuration configuration = getResources().getConfiguration();
            configuration.setLayoutDirection(new Locale("fa"));
        getResources().updateConfiguration(configuration, getResources().getDisplayMetrics());
    }
但在我看来,最好在每个布局中将方向设置为
rtl
,因为你可以看到在不运行应用程序的情况下它的外观

2。如果您想同时支持RTL和LTR语言,当然不要在布局中使用android:layoutDirection=“RTL/LTR”,因为它的方向即使通过代码也不会改变。因为它将在
rtl
ltr
方向上修复它。所以你应该用第二个。制作一个子活动并从中扩展所有活动,然后将此代码放入其中(仅举个例子):


最后,请原谅我的英语:)

在您的清单文件和应用程序标记中,您可以添加这两行

<manifest>
    <application
        .
        .
        .
        android:supportsRtl="false"
        tools:replace="android:supportsRtl" //(replace libraries' Rtl support with ours)
        >
    </application>
</manifest>


只需在您的应用程序主题样式中添加类似的内容即可:

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

这对我有效。

你确定这完全有效吗?我想像你一样用波斯语,这样可以吗?这个解决方案对我有用,谢谢。
<item name="android:layoutDirection">ltr</item>