有没有办法确定设备是否采用从右到左的语言(类似阿拉伯语),而不是从左到右(英语)?
与旧API级别(低至10)兼容的东西是必要的
解
我最终在接受的答案中使用了xml方法。更进一步,我还添加了此处指出的代码,用于我无法访问getResources()的实例
Identifying RTL language in Android
更多信息
这个问题仍然有很多流量;我想指出的其他事情:当我最初问这个问题时,我认为这部分是为了帮助解决RTL与LTR中不同的指点V形符号 - 另一种实现这一点的光滑方法是在标准中放置可绘制资源并{{1} }目录 - 表示无需代码来确定要显示哪一个!
答案 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
文档:
或者,如果你有minAPI 17或更高版本,你可以使用它:
val isLeftToRight=TextUtils.getLayoutDirectionFromLocale(Locale.getDefault())==View.LAYOUT_DIRECTION_LTR
文档:
答案 2 :(得分:14)
Gr,谷歌搜索时间稍长,我会在发布之前找到它:
if (ViewCompat.getLayoutDirection(getView()) == ViewCompat.LAYOUT_DIRECTION_LTR) {
// ...
}
else {
// ...
}
答案 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)
答案 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()
}
玩得开心!