我正在处理我的应用上的语言设置。我能够通过使用
从我的主要活动中更改语言环境Resources resources = getResources();
Configuration configuration = resources.getConfiguration();
DisplayMetrics displayMetrics = resources.getDisplayMetrics();
configuration.setLocale(new Locale("ar"));
resources.updateConfiguration(configuration,displayMetrics);
recreate();
一切正常但我注意到后退按钮没有改变它到RTL的方向:
当我将语言设置为RTL语言时,这是我预期的行为:
这可能吗?
答案 0 :(得分:1)
设置阿拉伯语时尝试调用此方法:
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private void forceRTLIfSupported()
{
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
//HERE CHECK CONDITION FOR YOUR LANGUAGE if it is AR then
//change if it is english then don't
getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
}
}
答案 1 :(得分:1)
更改导航栏的方向意味着该应用将更改设备的Locale
。这样的事情类似于在设备的语言设置中设置设备语言,因为Locale
定义了支持语言的视图的语言和方向(rtl或ltr)。由于您只更改了应用中Locale
的{{1}},因此不会影响设备和系统上其他应用的Context
应用程序/组件(启动器,导航栏,状态栏等)。因此,导航栏不会更改,也不会受到应用更改的影响。
此外,要更改设备Context
或任何其他配置(字体,字体大小,显示指标,轮换等等),应用程序需要Locale
权限才能执行此操作。虽然docs中未说明,SET_CONFIGURATION
权限只能自动提供给语言和显示设置等系统应用。我还没有看到第三方应用程序是否可以向用户请求,但我相信它在开发我的应用程序时大多数情况下都没有使用SET_CONFIGURATION
命令授予权限。命令行。通常我会在测试期间这样做,因为我的应用程序也支持其他语言,并且希望确保应用程序在这种情况下表现良好,因此我在命令行中授予它权限并让它更改语言环境测试中的设备。
答案 2 :(得分:0)
导航栏的方向(以及操作系统的其他部分,如“设置”)与应用程序无关。用户可以拥有带RTL应用程序的LTR OS。因此,更改应用程序的区域设置和方向不会影响底层操作系统,用户必须手动更改它。