首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android上,日文字符看起来像中文。

在Android上,日文字符看起来像中文。
EN

Stack Overflow用户
提问于 2011-09-21 16:17:24
回答 3查看 9K关注 0票数 27

序言:由于API 17 (Android4.2),有一个方法TextView.setTextLocale()可以显式地解决TextViews和派生类的这个问题。指定一个日语区域设置(Locale.JAPAN),那么Unihan字符将看起来是日语的。

我在Android上有一个应用程序,它在WebViews和TextViews中显示日语文本。按照惯例,中国和日本有一些汉字(汉字)的外观不同,但它们共用相同的Unicode码点。通常,浏览器将依赖于lang标记来选择正确的字形。在Android上,它们都默认为中国形状,我想要日本形状。

这个问题在这篇文章中得到了很好的解释。这篇文章也很好地说明了这个问题--当在Android (多达2.2)上观看时,“依赖于语言的字符的示例”中的字符看起来都是一样的,而且是中文的。

使用lang="ja"属性没有帮助。将整个系统的区域设置转换为日语也没有帮助。

我想知道在日本销售的Android手机。像直,今,化这样的角色看起来也是中式的吗?我想不是吧。

所以问题是:有没有官方本地化的Android图片?我能让一个在模拟器上运行吗?DroidSansFallback字体仍然是这些字体上唯一启用CJK的字体吗?如果是的话,它和香草的美国Android一样吗?

我希望日文符号隐藏在字体的深处(Unicode私密区域或其他什么地方)。如果是这样,我可以利用他们..。

编辑:找到DroidSansJapanese.ttf,通过复制到/system/字体将其安装在模拟器上,重新启动。它对Unihan文章的外观没有任何影响。即使是日语文本输入的提示区域(应该更清楚)也会显示得像中文一样。

我如何知道DroidSansJapanese.ttf的字体名称?我有一种感觉,它仍然是Droid,和内置的DroidSansFallback字体一样。但是,如果它们包含相同的字体,应该优先考虑的是什么呢?人们会认为--系统环境,但显然不是。Android中的字体只是通过复制来安装的,对吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-23 07:17:50

有完全日本支持的字体。我听说过一些人在谈论DroidSansJapanese.tff和TakaoPGothic。

票数 4
EN

Stack Overflow用户

发布于 2011-09-22 03:17:41

找到了一个有点排他性的解决方案。

DroidSansJapanese.ttf字体存在并可供下载,例如,这里。我下载了它,将其重命名为DroidSansJapanese.mp3,以避免1MB的压缩资产限制,并将其置于assets/web下。然后,我介绍了以下CSS语句:

代码语言:javascript
复制
@font-face
{
font-family: "DroidJP";
src:url('DroidSansJapanese.mp3')
}

然后,我将“DroidJP”添加到每个相关CSS样式的font-family中。按照我加载HTML的方式,assets/web文件夹已经被指定为加载链接内容的基础。

经过仔细检查,我在应用程序中找到了几个在TextViews中使用日语的地方。对于这些地方,我加载了这样的字体:

代码语言:javascript
复制
Typeface s_JFont =
    Typeface.createFromAsset(Ctxt.getAssets(), "web/DroidSansJapanese.mp3");

并在每一个相关的TextView上打电话给TextView。现在是为了利润!

这使我的APK增加了大约1MB。还有另一种方法,我会以压缩的形式将字体存储在资产中--这将为我节省大约500 KB的APK大小,但我必须在第一次运行时将其扩展到电话内存,担心数据文件夹路径,并失去与Android 1.5的兼容性。

一些功劳应该是:这里这里。在Android2.1( WebViews,而不是TextViews)上不起作用--这是一个已知臭虫

现在,问题仍然存在--如何识别默认字体已经包含日文形状的设备?

编辑re: mp3黑客。我首先实现了分块解决方案,但随后决定在资产中使用字体。分组方法有一个优点--较小的APK大小--还有以下缺点:

  • 消耗更多的电话内存??您最终会将压缩字体存储在资产中,并在数据目录中解压缩。
  • 与TextView端的Android1.5不兼容-- Typeface.createFromFile()方法是在API 4中引入的
  • 使HTML生成复杂化--由于数据路径是一个变量,因此需要对带有@字体面声明的CSS进行参数化。
  • 减慢第一个应用程序的启动速度--你会花时间来组合这些块。

将字体存储为压缩资产也不是一种选择--字体在WebView中不会出现,您可以在LogCat中清楚地看到关于“数据超过UNCOMPRESS_DATA_MAX”的消息。

票数 4
EN

Stack Overflow用户

发布于 2018-11-04 20:51:39

在onCreate/OnCreateView中使用以下内容:

代码语言:javascript
复制
AssetManager am = getContext().getApplicationContext().getAssets();
mDroidSansJapaneseTypeface = Typeface.createFromAsset(am, String.format(Locale.JAPAN, "fonts/%s", "DroidSansJapanese.ttf")); //I put the font file in the assets/fonts/ folder

然后,对于文本视图:

代码语言:javascript
复制
myTextView.setTypeface(mDroidSansJapaneseTypeface);
myTextView.setTextLocale(Locale.JAPAN);

请注意,不是100%的所有字体将显示在Android中。我没有看到太多的问题,日本字符,但其他的CJK字符可能会显示为空白框,无论您使用什么ttf文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7503133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档