从应用程序设置区域设置 - 后退按钮问题

时间:2018-03-03 07:19:32

标签: android localization

我正在处理我的应用上的语言设置。我能够通过使用

从我的主要活动中更改语言环境
Resources resources = getResources();
Configuration configuration = resources.getConfiguration();
DisplayMetrics displayMetrics = resources.getDisplayMetrics();
configuration.setLocale(new Locale("ar"));
resources.updateConfiguration(configuration,displayMetrics);
recreate();

一切正常但我注意到后退按钮没有改变它到RTL的方向:

enter image description here

当我将语言设置为RTL语言时,这是我预期的行为:

enter image description here

这可能吗?

3 个答案:

答案 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。因此,更改应用程序的区域设置和方向不会影响底层操作系统,用户必须手动更改它。