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

时间:2013-03-14 12:14:15

标签: android internationalization

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

textView.setTypeface(Typeface.createFromAsset(getAssets(), "DroidSansJapanese.ttf"));

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

3 个答案:

答案 0 :(得分:5)

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

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

Android 4.1发布时对日式汉字的支持有所改善。 This commit详细介绍了更改内容。如果您的手机当前使用的是日语区域设置,则Android应显示日式汉字。我已经看到这种行为与运行Android 4.1的非日本三星Galaxy Note 2一起使用。当我将系统语言设置为英语(英国/美国)时,我会在查看汉字文本时看到中文渲染。但是,当我将语言设置为日本语时,我可以看到日式渲染。我没有对此进行测试,但我想知道forcing the locale programmatically是否也可以强制显示4.1 +设备的日式汉字。

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

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

答案 1 :(得分:2)

无法直接在XML中设置字体。

如果您计划使用大量日文TextView,可能更容易创建自定义视图来为您处理它,它以编程方式从其构造函数设置字体。

然后,只要您将自定义View以XML格式向下移动,它就会拥有正确的字体。

答案 2 :(得分:2)

这里回答了一个非常类似的问题:

Custom Font on Android

您可以使用GitHub https://github.com/browep/AndroidCustomFontWidgets/中的一些代码来指定XML中的字体。

<com.github.browep.customfonts.view.FontableTextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="This is in a custom font"
    app:font="MyFont-Bold.otf" />