9

Android 4.2 引入了 RTL (BiDi) 支持,要开始使用它,我只需按照说明进行操作(清单文件中的元素的 android:supportsRtl 属性并将其设置为“true”)

但是随后我的 ActionBar 徽标也会向右更改方向(徽标显示在右侧),这是我不想要的。我确实想使用 RTL 功能,但保持 ActionBar 向左...

换句话说,当语言方向为 RTL 时,如何使用 android:supportsRtl 属性而不改变 Android 4.2 上的 ActionBar 方向

有什么建议么 ?

4

2 回答 2

12

我有同样的问题,只是我有一个滑动菜单(AKA 导航抽屉),所以它变得更加奇怪(意味着你点击右上角的“向上”按钮并显示左侧的抽屉......)。

有两种可能的解决方案:

  1. 通过代码,在每个活动中:

    if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1)
        getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
    
  2. 按主题。编辑您自己的自定义主题,并添加正确的行。例子:

    <style name="AppTheme" parent="@style/Theme.Sherlock.Light">
      <item name="actionBarStyle">@style/CustomActionBarStyle</item>
      <item name="android:actionBarStyle" tools:targetApi="honeycomb">@style/CustomActionBarStyle</item>
    </style>
    
    <style name="CustomActionBarStyle" parent="@style/Widget.Sherlock.Light.ActionBar">
      <item name="android:layoutDirection" tools:targetApi="jelly_bean_mr1">ltr</item>
    </style>
    
于 2013-12-19T15:39:28.253 回答
3

首先,不抱歉,当您处于 RTL 模式时,ActionBar 应该镜像。这一点已经过 bidi/rtl 专家的检查和验证。设置 android:supportsRtl=true 意味着您的应用愿意支持 RTL 布局镜像。如果您这样做,则 ActionBar(作为每个 Android 框架小部件)将被镜像,因为在 LTR 方向上显示它没有意义。

其次,您关于访问左上角或右上角菜单的屏幕尺寸和人体工程学问题的论点与 RTL 支持无关。如果在 LTR 模式下存在此类问题,那么您将在 RTL 模式下遇到完全相同的问题。这仅与屏幕尺寸有关。

第三,所有 Android UI 框架小部件都原生支持 RTL 镜像。如果您发现问题,请在公共错误跟踪系统上提交错误。

第四,Google Apps 将支持 RTL 布局,并在需要时使用那些新的公共 RTL API。这与 Android 框架支持完全不相关。第一个支持 RTL 的应用程序是设置应用程序(以它的一些尚不了解 RTL 的提供程序为模)。

第五,关于向后移植,我假设您正在谈论是否应该将此功能放入支持库甚至是较旧的 Android 版本中。对于较旧的 Android 版本,由于其代码库已冻结,因此无法执行此操作。对于支持库,我们不能这样做,因为我们必须更改视图和其他基本小部件组件。

最后,如果您认为自己发现了问题,或者只是为可能丢失的任何内容提交功能请求,请在您的方法中更具建设性并提交错误报告。

于 2013-03-05T14:05:53.033 回答