PREAMBLE:从API 17(Android 4.2)开始,有一个方法TextView.setTextLocale()
明确解决了TextViews和派生类的这个问题。指定日语区域设置(Locale.JAPAN
),Unihan字符将显示为日语。
我在Android上有一个应用程序,它在WebViews和TextViews中显示日文文本。按照惯例,在中国和日本,有一些汉字(汉字)看起来不同,但共享相同的Unicode码点。通常,浏览器会依赖lang
标记来选择正确的字形。在Android上,它们都默认为中文形状,我想要日文形状。
问题在this article中得到了很好的解释。这篇文章也可以作为问题的完美例证 - 当在Android上观看(最多2.2)时,“语言相关字符示例”中的字符看起来都一样,中文也是如此。
使用lang="ja"
属性没有帮助。将整个系统区域设置切换为日语也无济于事。
我想知道在日本销售的Android手机。像rect,今,化这样的人物也会看起来像中国式吗?我假设没有。
所以问题是:那里有Android的官方本地化图片吗?我可以让一个人在模拟器上运行吗? DroidSansFallback字体仍然是那些唯一支持CJK的字体吗?如果是的话,它与香草美国Android上的相同吗?
我有点希望日语字形隐藏在字体深处(Unicode私有区域或其他东西)。如果是这样,我可以利用它们......
编辑:找到DroidSansJapanese.ttf,通过复制到/ system / fonts,重新启动它,将其安装在模拟器上。它对Unihan文章的外观没有任何影响。即使是日文输入的提示区域(应该知道更好)也会显示为中文。我如何知道DroidSansJapanese.ttf的字体名称?我觉得它仍然是Droid Sans,与内置的DroidSansFallback字体相同。但是,如果它们包含相同的字体,那么哪个应该优先考虑?有人会想 - 系统区域设置,但显然不是。 Android中的字体只是通过复制安装,对吧?
答案 0 :(得分:4)
找到了一个有点笨拙的解决方案。
DroidSansJapanese.ttf字体存在且可供下载,例如here。我下载了它,将其重命名为DroidSansJapanese.mp3以避免1MB压缩资产限制,并将其置于assets/web
之下。然后我介绍了以下CSS语句:
@font-face
{
font-family: "DroidJP";
src:url('DroidSansJapanese.mp3')
}
然后我将'DroidJP'添加到每个相关CSS样式的font-family
。我加载HTML的方式,assets/web
文件夹已被指定为加载链接内容的基础。
仔细检查后,我在应用程序中找到了几个日语位于TextView
的地方。对于那些,我加载了这样的字体:
Typeface s_JFont =
Typeface.createFromAsset(Ctxt.getAssets(), "web/DroidSansJapanese.mp3");
并在每个相关的TextView上调用setTypeface()
。现在为PROFIT!
这将我的APK扩展了大约1 MB。还有另一种方法,我将字体存储在压缩形式的资产中 - 这样可以节省大约500 KB的APK大小,但是我必须在第一次运行时将其扩展到手机内存,担心关于数据文件夹路径,并失去与Android 1.5的兼容性。
有些信用证到期:here和here。在Android 2.1(WebViews,而不是TextViews)上不起作用 - 这是known bug。
现在,问题仍然存在 - 如何识别默认字体已包含日文形状的设备?
编辑重新:mp3黑客。我首先实现了分块解决方案,但随后决定使用资产中的字体。分块方法有一个好处 - 较小的APK大小 - 以及以下缺点:
Typeface.createFromFile()
是在API级别4中引入的将字体存储为压缩资源也不是一个选项 - 然后该字体不会显示在WebView中,您可以在LogCat中清楚地看到有关“数据超过UNCOMPRESS_DATA_MAX”的消息。
答案 1 :(得分:4)
有些日语支持的字体。我听说有人谈论DroidSansJapanese.tff和TakaoPGothic。
答案 2 :(得分:0)
在您的onCreate / OnCreateView中使用以下内容:
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
然后显示您的文本视图:
myTextView.setTypeface(mDroidSansJapaneseTypeface);
myTextView.setTextLocale(Locale.JAPAN);
请注意,并非所有字体的100%都会在Android中显示。对于日语字符,我没有看到太多问题,但是无论您使用什么ttf文件,其他CJK字符都可能显示为空白框。