Android:某些手机上没有显示俄罗斯卢布的货币?

我得到了一些格式化的string像这样的JSON数据

₽35 

不过,我注意到,在Nexus 5(棒棒糖)它显示正确,但其他手机,如HTC一个迷你和三星GT-I9505,它显示一个空白的字符。

我试图研究这个问题,除了在XML布局文件中,我找不到一个解决scheme,确保这一行是存在的

 <?xml version="1.0" encoding="utf-8"?> 

但我仍然有同样的问题

请帮忙

编辑2015年5月15日

加载自定义字体NotoSans(请注意,我知道这会泄漏内存,但它只是一个快速testing)

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView ruble = (TextView)findViewById(R.id.ruble); Typeface myFont = Typeface.createFromAsset(getAssets(),"fonts/NotoSans-Regular.ttf"); ruble.setTypeface(myFont); } 

在strings.xml中定义的俄罗斯卢布符号(注意我试过了)

  <string name="rubleSymbolJava">\u20BD</string> <string name="rubleSymbolHTML">₽</string> <string name="rubleSymbolHTMLHex">₽</string> 

同样的问题,在较旧的手机显示为广场,但在Android 5.0上工作,但没有更旧的。

解决请看我的答案

Solutions Collecting From Web of "Android:某些手机上没有显示俄罗斯卢布的货币?"

我解决了这个问题 我刚刚使用了最新更新于2015年1月的新的Google Roboto字体,并具有卢布符号。

https://www.google.com/fonts/specimen/Roboto#pairings

研究表明,在2014年俄罗斯改变了他们的货币符号,所以旧的字体没有新的字形,所以对于其他有类似问题的人,看看你的字体是否已经更新

问题手机的默认字体可能会丢失俄罗斯卢布字形。 尝试将其硬编码到您的应用程序的某个地方的TextView,以确保这确实是问题,而不是一些其他的JSONparsing错误左右(似乎不太可能,因为它在一些手机上)。

如果缺less字形是您的问题,那么在您的项目中包含您自己的字体相当简单。 这样你就可以确定你可以支持你需要的所有字形。

以下是以编程方式执行的步骤:

  • 将您的字体的.ttf文件放置到项目中的文件夹资产/字体
  • 通过TypeFace myFont = Typeface.createFromAsset(activity.getAssets(), "fonts/font.ttf")加载它作为TypeFace对象TypeFace myFont = Typeface.createFromAsset(activity.getAssets(), "fonts/font.ttf") (根据需要replacemyFontfont.ttf
  • 通过myTextView.setTypeface(myFont)将其分配给所有的TextViewsPaints等等。 似乎也有一些技巧,让您将其设置为您的整个应用程序的默认字体 。

我还没有使用graphicsdevise器,但我相信在那里也不难。 另外,这些说明适用于Android Eclipse插件。 虽然Android Studio中的代码可能相同,但我不确定文件夹结构是否相同。 文档中提到有关将资产置于主资产而不仅仅是资产的情况 ,例如…

几件事情要考虑:

  • 确保您select的字体分布不违反该字体的任何许可证。
  • 您的应用现在不再使用设备的默认字体,这意味着您的应用在各个设备上看起来会更加相似和可预测,但是在特定设备上的其他应用可能会使用截然不同的默认字体。
  • .ttf文件的大小将添加到您的应用程序的大小。 大多数字体都很小(〜100KB),但是有些字体很大(几MB),特别是如果它们支持许多不同的语言,这可能会成为一个问题。
  • 确保你的字体支持你的项目需要的所有语言的所有字形。

还有一个额外的好处:只需将相应的“字母”放入TextView(记得Wingdings ?),就可以将一些自己的自定义字形添加到字体中,从而轻松地将简单的单色vectorgraphics包括到您的应用程序中。

我find了答案https://stackoverflow.com/a/36338231/1078641 ,添加&amp;subset=all参数到Roboto字体链接。

原来的Roboto字体链接就是这样

 <link href='https://fonts.googleapis.com/css?family=Roboto:400,300italic,300,400italic,500,500italic,700,700italic' rel='stylesheet' type='text/css'> 

在我添加&amp;subset=all链接后,我可以在Android设备上成功查看卢布符号

 <link href='https://fonts.googleapis.com/css?family=Roboto:400,300italic,300,400italic,500,500italic,700,700italic&amp;subset=all' rel='stylesheet' type='text/css'> 

您可以使用https://stackoverflow.com/a/29938454/755804中的代码检查字形是否存&#x5728;

如果不存在,则需要提供图像并使用TextViewWithImages或将其replace为字符序列。