【问题标题】:Codename One: Choosing and Styling a Native Font代号一:选择和设计原生字体
【发布时间】:2020-06-28 16:53:49
【问题描述】:

对于我的应用,我需要一种能很好地适应设备显示尺寸的字体。 我试过但不喜欢系统字体小、中、大。 以毫米为单位指定尺寸也没有吸引力,因为它必须针对每个设备进行计算。 我发现我喜欢 iOS 和 Android 设备上的原生按钮(未选择)的字体。 (在 Android 上,原生标签、按钮和文本字段有不同的字体大小;我想要一个统一的大小。) 所以我决定为我的所有文本组件使用原生按钮字体。

假设我将 UIID MyTextField 添加到主题并指定除字体之外的所有内容(背景、颜色等)。 我想从本机按钮派生的字体。 但是,开发人员指南说(在 3.3.13 中):'总是只从您定义的 UIID 继承,例如我的按钮'。 那么如何访问原生 Button 字体呢?我决定在代码中设置字体并且有效:

// includeNativeBool == true
Font myFont = new Button().getUnselectedStyle().getFont();
...
TextField textField = new TextField();
textField.setUIID("MyTextField");
textField.getAllStyles().setFont(myFont);

这是正确的解决方案吗?或者有没有办法处理Style中的字体?

【问题讨论】:

  • P.S.我没有覆盖主题中的 Button 而是使用我自己的 MyButton 等。
  • 如果您喜欢原生字体,只需使用您想要的大小即可。无需使用您报告的代码。毫米是设置尺寸的更自然的方式,您不需要计算任何东西,以像素为单位的实际尺寸是自动计算的。如果您想了解原生 Android 和 iOS 主题的样式,可以从以下位置下载 res 文件:github.com/codenameone/codenameone-skins/tree/master/Phones
  • 是的,我现在使用“毫米”(不是真正的毫米),另请参阅答案下方的 cmets。感谢您的链接。

标签: fonts codenameone native derived


【解决方案1】:

按钮字体大小在各个操作系统的主题中以毫米为单位定义。 MM 尺寸根据显示密度是统一的,因此它应该是您可以获得的最接近统一尺寸的东西。

你所做的是一个 hack。理论上它会起作用,但它看起来很丑陋,并且在我们更改底层原生主题设计时会表现得不一致和不可预测。

【讨论】:

  • 我不明白你为什么说它看起来很丑。我在许多设备(iPhone X、iPhone SE、iPhone 5、iPad 4、Nexus 5 平板电脑和三星手机)和十几个模拟器皮肤(iOS 和 Android)上进行了尝试,它看起来非常好。 iPhone X 上的字体大小约为 2 毫米,iPad 上的字体大小约为 3 毫米(例如),这正是我想要的。
  • 如果我的实现被视为 hack,您能否以不是 hack 的方式提供此功能?我想知道(派生)的是本机按钮的字体或字体大小 - 或任何其他可以很好地适应所有设备的字体。我看不出使用毫米对我有什么帮助,因为它们是绝对的而不是相对的。而且系统字体的缩放不如原生按钮。
  • 丑陋的就像一个不适合的“黑客”。 “本机”按钮样式以毫米为单位,因此实际上没有区别。毫米会根据设备密度而变化,因此它们不是绝对单位。
  • 我明白了。所以我在主题中指定了一个真正的类型字体(例如“native:MainRegular 3 mm”,无需提供 .ttf 文件),这将像原生按钮字体一样缩放。这确实是我一直在寻找的功能。将其称为“毫米”是不幸的。 (虽然我知道有历史原因。)
  • 没有。它是毫米。尺寸适应屏幕密度,与像素不同,您可以拥有不同的数量毫米是用作全球标准的物理尺寸。
猜你喜欢
  • 2021-11-27
  • 1970-01-01
  • 2018-12-17
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-28
相关资源
最近更新 更多