我的应用程序将来必须支持RTL和LTR语言但现在只支持RTL 。当我在每个布局中使用android:supportsRTL="true"
和android:layoutDirection="end"
时,NavigationView和工具栏以及其他一切都很好。
但唯一的问题是,当用户将系统语言更改为LTR语言时,由于布局方向的改变,一切都会出错。
我需要什么:我必须设置supportsRTL:“true”。当用户在启动时选择“应用程序”语言而不是根据操作系统语言时,我需要以编程方式更改布局方向。
问题:有没有办法通过更改操作系统语言来阻止自动更改布局方向(不是通过设置supportsRTL false)?
见下图:
如果我设置android:supportRTL="false"
并设计RTL的布局,工具栏和导航的菜单方向将成为我的新烦恼。
见下图:
答案 0 :(得分:9)
<强>解决即可。这只是一个小小的可怕错误。
但对于那些有类似问题的人来说,我在Android版本 17或以上上工作得非常好,对于前17版我认为唯一的方法是使用单独的布局进行RTL和LTR。
如果你必须在清单中使用android:supportsRTL="true"
,那么:
的 1。如果您只想支持RTL语言,请防止根据操作系统语言更改方向:
只需将android:layoutDirection="rtl"
添加到所有布局的父级(也可以在styles.xml
like this中使用主题)。
或者制作一个子活动,并从中扩展你的所有活动,然后把这段代码放在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
的方向上修复它。所以你应该使用第二个。制作一个子活动,并从中扩展您的所有活动,然后将此代码放入其中(仅作为示例):
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
Configuration configuration = getResources().getConfiguration();
if (isSlectedLanguageRTL) {
configuration.setLayoutDirection(new Locale("fa"));
} else {
configuration.setLayoutDirection(Locale.ENGLISH);
}
getResources().updateConfiguration(configuration, getResources().getDisplayMetrics());
}
最后,抱歉我的英语:)
答案 1 :(得分:0)
在您的清单文件和应用程序标记内,您可以添加这两行。
<manifest>
<application
.
.
.
android:supportsRtl="false"
tools:replace="android:supportsRtl" //(replace libraries' Rtl support with ours)
>
</application>
</manifest>
有些库在其清单文件中支持Rtl,以便您可以使用 要使用这些库,您必须替换它们的清单代码行 和你的一起。
这个问题可以解决:)
答案 2 :(得分:0)
只需在您的应用主题样式中添加类似的内容:
Row(
children: [
Expanded(
child:DropDownWidget(
list: ["Yes","No"],
data: patientConsent,
hint: getTranslated(context, "select"),
heading: getTranslated(context, "patient_consent"),
),
),
],
),
CustomFromField(
heading: getTranslated(context, "sample_id")
-----
这对我有用。