嗨,我正在写一个小巧的Android应用程序,它正在使用电话标签,但我不明白我是如何翻译Documentation中描述的uri值的。
我想要做的是将TYPE_HOME
翻译为Home
,依此类推。我目前的解决方案是列出所有已翻译的字符串,但它已经提出了很多问题。但我希望能够像地址簿和其他应用程序一样对它进行操作。
答案 0 :(得分:25)
Android有一个内置的方法来做到这一点......
import android.provider.ContactsContract.CommonDataKinds.Phone;
String s = (String) Phone.getTypeLabel(context.getResources(), Phone.TYPE_HOME, "");
答案 1 :(得分:1)
据我所知,标签没有资源。您只能在自己的应用中将所有字符串作为资源,并将默认类型转换为这些字符串。
更新:有很多解决方案可以将标签类型转换为字符串。例如,您可以定义string-array
资源:
<string-array name="labels">
<item>@string/phone</item>
<item>@string/mobile</item>
<item>@string/work</item>
</string-array>
然后,您应该为您支持的所有语言定义这些字符串。在使用getResources().getTextArray(R.array.labels)
加载此数组后,您将能够将标签代码转换为字符串。您还必须处理自定义标签。
这是一个可能的解决方案,但实际上一切都取决于您应用的架构。
答案 2 :(得分:1)
查看the source code for ContactsListActivity
,Android开发人员似乎只将Phone.TYPE_MOBILE
之类的值映射到他们在strings.xml中定义的值,仅适用于该应用,表示没有通用的系统标签可以轻松查找(例如,可能会使用@android:drawable
来使用系统图形,这不是推荐的做法,因为图像在平台之间会发生变化。)
答案 3 :(得分:0)
是的,您可以使用以下代码获取本地化的电话类型字符串:
int phoneNumberType = (int)pCur.getInt(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
ContactsContract.CommonDataKinds.Phone.getTypeLabel(context.getResources(), phoneNumberType , "")
但对于自定义手机类型,您应该使用cosider手机标签,而不仅仅是手机类型:
String phoneLabel = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.LABEL));