Android 联系人:不正确的本地化整理/排序
Posted
技术标签:
【中文标题】Android 联系人:不正确的本地化整理/排序【英文标题】:Android contacts: Incorrect localized collation/sorting 【发布时间】:2011-05-13 19:56:10 【问题描述】:这是我的问题:我正在编写一个替代联系人应用程序,该应用程序指定使用很多不同的语言和字母表。当用我自己的语言瑞典语查询名字时,使用元音变音字符的名字对我来说是不合逻辑的,但我想对 unicode 来说是合乎逻辑的:
应该是/瑞典风格:A、B、C、...、Z、Å、Ä、Ö。
查询结果:A, Å, Ä, B, ..., N, O, Ö, P, ...
我认为这对于任何偏离拉丁字母的语言来说都是一个问题。我所做的所有测试都在模拟器上。我的开发组正在对框架进行更改,因此也欢迎低级别的回答。
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[]
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.PHOTO_ID
;
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
mCursor = managedQuery(uri, projection, null, null, sortOrder);
更新:我们目前正在调查这条赛道:Sort a String array,TBC... 我还在 Google Code 上添加了它作为问题。
【问题讨论】:
您确定设备具有正确的区域设置吗?尝试使用 SQLiteDatabase.setLocale 数据库是由安卓系统管理的,setLocale(Locale l) 不是静态函数。当我在解释文档(2.2)时,整理器 LOCALIZED 应该能够管理这种排序 - 但他们没有任何文档(文档说,需要 XXX 链接!:P) 【参考方案1】:嘎嘎。看起来是这样的:
在 vanilla Java (SE-1.6) 中运行以下代码会生成所需的输出:
String strings[] = "Åke", "Äskil", "Otto", "Adam", "Örjan", "Palle", "Nisse";
Locale locale = new Locale("sv", "SE");
Collator collator = java.text.Collator.getInstance(locale);
java.util.Arrays.sort(strings, collator);
但 android 中的相同代码对我不起作用。
编辑:我在 Android Google Code 网站上对此做了一个issue,它已被评论者评论。
【讨论】:
以上是关于Android 联系人:不正确的本地化整理/排序的主要内容,如果未能解决你的问题,请参考以下文章
“添加联系人”activity.xml 文件在 Android Studio 中的格式不正确