使用android时禁用自动更改布局方向:supportsRTL=";“真的”;
我的应用程序将来必须同时支持RTL和LTR语言,但目前只支持RTL。当我在每个布局中使用使用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”。当用户在启动时选择“应用程序”语言而不是根据操作系统语言时,我需要以编程方式更改布局方向 问题:有没有办法通过更改
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>