我正在为从右到左的特定语言创建一个 android 应用程序。我正在使用 ActionBarSherlock(兼容的 android 动作栏库)。
我真正想要的是如何将操作栏的方向更改为 RTL,即使用户没有将默认的 Locale 设置为 RTL 语言。
如果有人对标准的 android Action Bar 有任何想法,它很有价值,可能会有所帮助,请分享。
谢谢
6 回答
从 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 时才会更改。
希望有帮助。
使用它,它将从 rtl 进行布局,但这在你的 xml 的父根目录中
android:layoutDirection="rtl"
android:textDirection="rtl"
我们必须相信编程中的一条强有力的规则:
当您了解您的工具时,一切皆有可能。
因此,从现在开始,您可以使用此库来真正RTLize 您的操作栏: https ://github.com/semsamot/ActionBarRTLizer
当然,它与API Level 7+兼容。
布格是对的。您提到的“Nabz Bazar”应用程序在每个版本的 android 上都没有对齐。正如您在此处看到的, ABS 在 Android 4.0 或更高版本上并没有真正做任何事情,并且该应用程序的屏幕截图位于 4.2 android 上。
我很确定您将无法按照您的要求进行操作。ActionBar 模式非常具体,支持它的库将仅支持定义的模式(左上角有图标,然后在右侧布置标题和操作按钮)。
更改测试就像更改应用程序中的区域设置和文本一样简单(正如您已经提到的)。
支持标准 ActionBar 模式的库不支持更改 ActionBar 本身内元素的位置 - 因为您所描述的不是受支持的 UI 模式。
我认为你应该让 AB 保持原样。没有必要切换顺序,因为无论如何都没有左右方向 - 改变它会对您的用户造成极大的伤害。
最重要的是,您将无法使用现有的库来做到这一点——而且您可能无论如何也不应该这样做。
如果您的项目完全是 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);
}
}