4

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

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

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

4

3 回答 3

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+ 设备的用户也有良好的体验,前提是他们使用的是日语语言环境。否则,捆绑字体就是您的答案,并且您已经对所需内容有了很好的了解。

于 2013-03-14T14:18:23.347 回答
2

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

如果您打算使用大量日文 TextView,则创建一个自定义 View 来为您处理它可能会更容易,它可以通过其构造函数以编程方式设置字体。

然后,每当您将自定义视图放入 XML 中时,它都会有正确的字体。

于 2013-03-14T13:34:24.450 回答
2

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

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" />
于 2013-03-14T14:23:25.903 回答