android确定设备是否在从右到左的语言/布局

时间:2014-10-24 13:55:22

标签: android right-to-left

有没有办法确定设备是否采用从右到左的语言(类似阿拉伯语),而不是从左到右(英语)?

与旧API级别(低至10)兼容的东西是必要的

我最终在接受的答案中使用了xml方法。更进一步,我还添加了此处指出的代码,用于我无法访问getResources()的实例

Identifying RTL language in Android

更多信息

这个问题仍然有很多流量;我想指出的其他事情:当我最初问这个问题时,我认为这部分是为了帮助解决RTL与LTR中不同的指点V形符号 - 另一种实现这一点的光滑方法是在标准中放置可绘制资源并{{1} }目录 - 表示无需代码来确定要显示哪一个!

9 个答案:

答案 0 :(得分:48)

您可以使用名为isrighttoleft.xml的xml文件创建 values-ldrtl 文件夹:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="is_right_to_left">true</bool>
</resources>

并在您的文件夹中使用相同的文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="is_right_to_left">false</bool>
</resources>

最后在代码中:

boolean isRightToLeft = getResources().getBoolean(R.bool.is_right_to_left);

values-ldrtl仅用于特定设置(例如语言)是从右到左阅读语言的设备。

答案 1 :(得分:23)

我认为这是一种更好的方式:

val isLeftToRight = TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault()) == ViewCompat.LAYOUT_DIRECTION_LTR

文档:

https://developer.android.com/reference/android/support/v4/text/TextUtilsCompat.html#getLayoutDirectionFromLocale(java.util.Locale)

或者,如果你有minAPI 17或更高版本,你可以使用它:

val isLeftToRight=TextUtils.getLayoutDirectionFromLocale(Locale.getDefault())==View.LAYOUT_DIRECTION_LTR

文档:

https://developer.android.com/reference/android/text/TextUtils.html#getLayoutDirectionFromLocale(java.util.Locale)

答案 2 :(得分:14)

Gr,谷歌搜索时间稍长,我会在发布之前找到它:

if (ViewCompat.getLayoutDirection(getView()) == ViewCompat.LAYOUT_DIRECTION_LTR) {
    // ...
}
else {
    // ...
}

http://developer.android.com/reference/android/support/v4/view/ViewCompat.html#getLayoutDirection(android.view.View)

答案 3 :(得分:1)

如果这仍然有相当大的流量,人们也应该考虑API 17+的Configuration.getLayoutDirection()。它将返回LayoutDirection.LTR或LayoutDirection.RTL。我想ViewCompat.getLayoutDirection(android.view.View)返回实际用于布局特定视图的方向。如果你正在做一些奇怪的事情,比如试图确定哪个人应该在聊天屏幕的哪一边(比如我),这可能是有用的。

答案 4 :(得分:1)

Kotlin代码,用于检测应用程序布局方向:

 val config = resources.configuration
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        if (config.layoutDirection == View.LAYOUT_DIRECTION_LTR) {
           // showAlertMsg("LTR")
        } else {
           // showAlertMsg( "RTL")
        }
    }
    else {
        //TODO("VERSION.SDK_INT < JELLY_BEAN_MR1")
           }

答案 5 :(得分:1)

如果您使用的是Core KTX

您可以使用:

if (Locale.getDefault().layoutDirection == LayoutDirection.RTL)

答案 6 :(得分:0)

是的,使用Bidi.getBaseLevel()函数,它将从左到右返回0,从右到左返回1.

http://developer.android.com/reference/java/text/Bidi.html#getBaseLevel()

答案 7 :(得分:0)

如果您的Build.VERSION.SDK_INT大于JELLY_BEAN (16),则可以使用以下方法:

val locale = Locale.getDefault() 
val isLtr = TextUtils.getLayoutDirectionFromLocale(locale) == ViewCompat.LAYOUT_DIRECTION_LTR

答案 8 :(得分:0)

就这么简单。只需使用:isRtll()

override fun isRtl(): Boolean {
    return super.isRtl()
}

玩得开心!