在textview中显示日语而不是中文

Spa*_*ter 4 android internationalization

在textview中显示日文文本时,android默认使用中文字体,显示错误的字符,在此处举例说明.将语言环境设置为日语可在模拟器上运行,但不适用于我的galaxy s3,可能是因为它不支持日语.还有一种解决方案是从资产中以编程方式设置字体,例如:

textView.setTypeface(Typeface.createFromAsset(getAssets(), "DroidSansJapanese.ttf"));
Run Code Online (Sandbox Code Playgroud)

但这似乎有点像kludge.有没有办法通过xml布局将字体设置为支持日语的字体?

ant*_*nyt 5

通常,在日本以外销售的较旧(<4.1)Android设备默认情况下会显示中文版的汉字.日本国内销售的Android设备默认使用日文版的汉字.DroidSansJapanese是DroidSans的日文字体,可在AOSP中使用.在创建Android构建时,似乎制造商可以选择在显示文本时使用系统/供应商提供的字体的首选项.即使您在(<4.1)非日语设备上更改了语言环境,它仍然可以显示不正确的字符版本.

如果您想为日本的日本用户本地化您的应用程序,他们很可能会在日本购买设备,因此汉字将正确显示(假设制造商采取了上述所需操作).如果您接受此行为,则无需进行任何更改.如果您正在构建针对日本以外用户的应用(例如,希望学习日语的人),那么这可能听起来不太好.

Android 4.1发布后,对日式汉字的支持有所提升.这个提交有一些关于改变内容的细节.如果您的手机当前使用的是日语区域设置,则Android应显示日式汉字.我已经看到这种行为与运行Android 4.1的非日本三星Galaxy Note 2一起使用.当我将系统语言设置为英语(英国/美国)时,我会在查看汉字文本时看到中文渲染.但是,当我将语言设置为日本语时,我可以看到日式渲染.我没有测试过这个,但我想知道如果以编程方式强制语言环境也可以强制显示4.1+设备的日式汉字.

您不能通过XML属性将字体设置为资产中的字体.您必须使用类似于原始问题中发布的代码在Java中执行此操作.要在全局范围内执行此操作,您可以创建自己的TextView子类来设置正确的字体,也可以遍历布局中的所有视图(例如,在Activity.setContentView(int)之后)并相应地更新它们,如果它们是TextViews .在另一个问题中对该解决方案有一些更详细的描述.包括日文字体可能会使你的APK膨胀相当大的数量.

如果您正在日本为日本用户编写应用程序,我不打算采取任何行动,因为它应该已经正确显示给他们.Android 4.1+设备的用户也可以获得良好的体验,前提是他们使用的是日语语言环境.否则,捆绑字体是你的答案,你已经很清楚需要什么.