【问题标题】:Is there a way to specify that Android's TypeFace should use lining numbers and not old-style numbers?有没有办法指定Android的TypeFace应该使用衬里数字而不是旧式数字?
【发布时间】:2015-10-07 13:42:21
【问题描述】:

我使用的是 Raleway,默认使用旧式数字,其中 3、4、5、7 和 9 低于基线。在 iOS 上,我可以指定功能设置以使用“大写”(衬里)数字:

UIFontFeatureSelectorIdentifierKey : @(kUpperCaseNumbersSelector)

如何在 Android 上执行此操作?

【问题讨论】:

  • 你用的是什么字体?只是机器人?否则是不是同时支持两种样式的OpenType字体?
  • 我使用的是Raleway——这是字体。是的,它支持这两种风格。
  • 如果没有其他人,我会尽快回复您。我相信这在 API 21 中本机是可能的。对于 API 20 及更低版本,它可能需要一个有点老套的解决方案。

标签: android typeface android-typeface


【解决方案1】:

因此,对于 Android 5.0 及更高版本(API 21),您可以使用 fontFeatureSettings 属性来启用此功能:

TextView myTextView = findViewById(R.id.myTextView);
myTextView.setFontFeatureSettings("lnum"); // Enabling lining numbers

我已经测试过它可以与 Raleway 一起使用。不幸的是,这可能不是一个足够的选择。有一个类似的问题here,其中建议的解决方案是将字体重新上传到 FontSquirrel 的font generator 并用衬号字形替换表格字形。

【讨论】:

  • 看起来很有希望。我的文本处理代码中已经有一个很大的if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP),所以我至少可以让它在某些手机上看起来不错。
  • 如果在 xml 中添加 android:fontFeatureSettings="lnum" 是否向后兼容?它不会显示它不是的警告消息。
  • 它应该显示一个警告,但它也很可能没问题(通常,未知属性会被忽略)。一个例外是三星在某个时候对 paddingStart/paddingEnd 做了一些奇怪的事情,如果你没有有条件地这样做会导致崩溃,所以你总是有可能遇到问题。不过,我敢打赌它会很好。
猜你喜欢
  • 2020-02-18
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 2019-09-02
  • 2021-05-16
  • 2020-12-20
相关资源
最近更新 更多