禁用ActionBar RTL方向

时间:2013-01-18 15:40:13

标签: android android-layout right-to-left bidi

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

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

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

有什么建议吗?

2 个答案:

答案 0 :(得分:11)

我有同样的问题,只有我有一个slidingMenu(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>
    

答案 1 :(得分:3)

首先,不用抱歉,当您处于RTL模式时,ActionBar应该镜像。 bidi / rtl专家已经检查并验证了这一点。设置android:supportsRtl = true意味着您的应用程序愿意支持RTL布局镜像。如果你这样做,那么ActionBar(就像每个Android Framework小部件一样)都会被镜像,因为在LTR方向显示它是没有意义的。

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

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

第四,Google Apps将支持RTL布局,并在他们希望的时候使用这些新的公共RTL API。这完全取决于Android Framework支持。支持RTL的第一个应用程序是设置应用程序(以某些尚未识别RTL的提供程序为模)。

第五,关于backport,我假设您正在讨论是否应该将此功能放入支持库或甚至是较旧的Android版本中。对于较旧的Android版本,由于其代码库被冻结,因此无法完成。对于支持库,我们不能这样做,因为我们必须更改View和其他基本小部件组件。

如果您认为自己发现了问题,或者只是提出了可能丢失的任何内容的功能请求,那么您最近会更有建设性并提交错误报告。