19

我正在为从右到左的特定语言创建一个 android 应用程序。我正在使用 ActionBarSherlock(兼容的 android 动作栏库)。
我真正想要的是如何将操作栏的方向更改为 RTL,即使用户没有将默认的 Locale 设置为 RTL 语言。
如果有人对标准的 android Action Bar 有任何想法,它很有价值,可能会有所帮助,请分享。
谢谢

4

6 回答 6

65

从 Android API Level 17+ 开始,它原生支持 RTL。要强制您的整个布局为 RTL,包括 ActionBar,请执行以下操作。

编辑您的 AndroidManifest.xml 并添加android:supportsRtl="true"到您的<application>标签中,然后将以下行添加到您的活动的 onCreate() 方法的顶部,forceRTLIfSupported();然后将后续函数插入您的活动中。

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private void forceRTLIfSupported()
{
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
        getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
    }
}

当然,这只对调试有帮助。用于View.LAYOUT_DIRECTION_LOCALE生产构建,因此您的布局仅在用户选择的系统位置/语言(即语言环境)支持 RTL 时才会更改。

希望有帮助。

于 2013-07-16T17:18:45.480 回答
5

使用它,它将从 rtl 进行布局,但这在你的 xml 的父根目录中

    android:layoutDirection="rtl"
    android:textDirection="rtl"
于 2017-07-30T12:36:48.757 回答
4

我们必须相信编程中的一条强有力的规则:

当您了解您的工具时,一切皆有可能。

因此,从现在开始,您可以使用此库来真正RTLize 您的操作栏https ://github.com/semsamot/ActionBarRTLizer

当然,它与API Level 7+兼容。

于 2014-08-22T13:17:24.840 回答
2

布格是对的。您提到的“Nabz Bazar”应用程序在每个版本的 android 上都没有对齐。正如您在此处看到的, ABS 在 Android 4.0 或更高版本上并没有真正做任何事情,并且该应用程序的屏幕截图位于 4.2 android 上。

于 2013-09-09T10:38:51.653 回答
1

我很确定您将无法按照您的要求进行操作。ActionBar 模式非常具体,支持它的库将仅支持定义的模式(左上角有图标,然后在右侧布置标题和操作按钮)。

更改测试就像更改应用程序中的区域设置和文本一样简单(正如您已经提到的)。

支持标准 ActionBar 模式的库不支持更改 ActionBar 本身内元素的位置 - 因为您所描述的不是受支持的 UI 模式。

我认为你应该让 AB 保持原样。没有必要切换顺序,因为无论如何都没有左右方向 - 改变它会对您的用户造成极大的伤害。

最重要的是,您将无法使用现有的库来做到这一点——而且您可能无论如何也不应该这样做。

于 2013-07-07T13:23:16.850 回答
0

如果您的项目完全是 RTL 语言,您可以使用其中的一种或全部。

在 AndroidManifest.xml 上设置

<application

    android:supportsRtl="true"

    >

在 Xml.file 中设置

    android:layoutDirection="rtl"
    android:textDirection="rtl"

在 java.class 中设置

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private void forceRTLIfSupported()
{
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
        getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
    }
}
于 2021-12-19T13:48:01.970 回答