Fonts 代号一:选择本机字体并设置其样式

Fonts 代号一:选择本机字体并设置其样式,fonts,codenameone,native,derived,Fonts,Codenameone,Native,Derived,对于我的应用程序,我需要一种与设备显示大小匹配的字体。 我试过了,但不喜欢系统的小字体、中字体和大字体。 以毫米为单位指定尺寸也没有吸引力,因为必须为每个设备计算尺寸。 我发现我喜欢iOS和Android设备上本机按钮(未选中)的字体。 (在Android上,本机标签、按钮和文本字段有不同的字体大小;我想要统一的大小。) 因此,我决定对所有文本组件使用本机按钮字体 假设我将UIID MyTextField添加到主题中,并指定除字体之外的所有内容(背景、颜色等)。 我希望从本机按钮派生的字体。 但

对于我的应用程序,我需要一种与设备显示大小匹配的字体。 我试过了,但不喜欢系统的小字体、中字体和大字体。 以毫米为单位指定尺寸也没有吸引力,因为必须为每个设备计算尺寸。 我发现我喜欢iOS和Android设备上本机按钮(未选中)的字体。 (在Android上,本机标签、按钮和文本字段有不同的字体大小;我想要统一的大小。) 因此,我决定对所有文本组件使用本机按钮字体

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

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

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

按钮字体大小在相应操作系统的主题中以毫米为单位定义。基于显示密度,MM大小是一致的,因此它应该是最接近您所能获得的一致大小


你所做的是一个黑客。它在理论上是可行的,但它看起来很难看,而且在我们更改基本的本机主题设计时,它的行为会不一致和不可预测。

p.S.我不会覆盖主题中的按钮,而是使用我自己的MyButton等。如果您喜欢本机字体,只需使用您想要的大小即可。没有必要使用像您报告的那样的代码。毫米是设置大小的更自然的方式,您不需要计算任何东西,以像素为单位的实际大小是自动计算的。如果你想了解原生Android和iOS主题的样式,可以从以下位置下载res文件:是的,我现在使用的是“毫米”(不是真正的毫米),请参见答案下面的注释。谢谢你的链接。我不明白你为什么说它看起来很丑。我在许多设备(iPhoneX、iPhoneSE、iPhone5、iPad4、Nexus5平板电脑和一部三星手机)和十几个模拟器皮肤(包括iOS和Android)上进行了尝试,看起来非常好。例如,iPhone X上的字体大小约为2毫米,iPad上的字体大小约为3毫米,这正是我想要的。如果我的实现被视为一种黑客行为,您能否以一种非黑客行为的方式提供此功能?我只想知道(派生)本机按钮的字体或字体大小,或者任何其他适合所有设备的字体。我看不出使用毫米对我有什么帮助,因为它们是绝对的,而不是相对的。而且,系统字体的缩放效果不如本地按钮好。就像一个不合适的“黑客”一样难看。“本机”按钮样式以毫米为单位,因此没有任何区别。毫米根据设备密度而变化,所以它们不是绝对单位。我明白了。因此,我在主题中指定了一种真正的字体(例如“native:MainRegular 3 mm”,无需提供.ttf文件),这种字体的缩放方式与本机按钮字体完全相同。这确实是我一直在寻找的功能。称之为“毫米”是不幸的。(虽然我知道有历史原因)不,是里程计。该尺寸可根据屏幕密度进行调整,而不同的像素可以有不同的数量。毫米是用作全球标准的物理尺寸。