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

Ers*_*man 9 android

我正在使用这样的格式化货币字符串获取一些JSON数据

?35
Run Code Online (Sandbox Code Playgroud)

但是,我注意到在Nexus 5(Lollipop)上它显示正确,但其他手机,如HTC one mini和Samsung GT-I9505,它显示一个空白字符.

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

<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)

但我仍然有同样的问题

请帮忙

编辑2015年5月15日

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

@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);
    }
Run Code Online (Sandbox Code Playgroud)

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

     <string name="rubleSymbolJava">\u20BD</string>
  <string name="rubleSymbolHTML">&#8381;</string>
    <string name="rubleSymbolHTMLHex">&#x20bd;</string>
Run Code Online (Sandbox Code Playgroud)

同样的问题,在老式手机上显示为方形但适用于Android 5.0但没有更旧.

已解决请参阅我的回答

Ers*_*man 12

我修好了.我刚刚使用了2015年1月更新的新版Google Roboto字体,并使用了卢布符号.

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

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


Mar*_* A. 6

问题手机的默认字体可能缺少俄罗斯卢布标志符号.尝试将其硬编码到应用程序中的某个TextView中,以确保这确实是问题,而不是其他一些JSON解析错误左右(似乎不太可能,因为它适用于某些手机).

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

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

我没有太多使用过图形设计师,但我确信它也不会那么困难.此外,这些说明适用于Android Eclipse插件.虽然Android Studio中的代码可能相同,但我不确定文件夹结构是否相同.文档说明了将资产置于主要/资产而不仅仅是资产,例如......

需要考虑的几件事:

  • 确保您选择的字体分发不违反该字体的任何许可.
  • 您的应用现在将不再使用设备的默认字体,这意味着您的应用在各种设备上看起来会更加相似和可预测,但它可能会在可能使用非常不同的默认字体的特定设备上的其他应用中脱颖而出.
  • 在规模的.ttf文件将添加到您的应用程序的大小.大多数字体相当小(~100KB),但有些字体变大(几MB),特别是如果它们支持许多不同的语言,这可能会成为一个问题.
  • 确保您的字体支持项目所需的所有语言中的所有字形.

一个额外的好处:您可以将一些自己的自定义字形添加到字体中,只需将相应的"字母"放入TextView(记住Wingdings?),就可以轻松地将简单的单色矢量图形包含到您的应用中.