字体特性设置=smcp在Android中无法使用

4
我需要在TextView中显示小型大写字母文本。我正在尝试使用以下代码:
<TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFeatureSettings="smcp"
        android:textColor="@color/black"
        android:textSize="16sp"
        android:text="TEXT" />

但它只显示普通文本,没有小型大写字母效果。我也尝试通过编程设置它 (text1.fontFeatureSettings = "smcp"),但也没有成功。

如何在Android中制作小型大写字母文本?为什么fontFeatureSettings不起作用?


1
setFontFeatureSettings方法自API 21版本开始添加。您是否在API 21或更高版本上测试您的代码? - undefined
@MirMiladHosseiny 我正在 Android 6 (API 23) 上进行测试。 - undefined
你的测试设备是什么?你在另一台设备上进行了测试吗? - undefined
2个回答

8
为了让此功能正常工作,您需要拥有一个实际具有小型大写字母字符的字体 - 因此,要使其正常工作,请通过app:fontFamily(android:fontFamily)传递带有小型大写字母的字体,例如Aller Display,然后使用android:fontFeatureSettings="smcp"将其变成小型大写字母。

希望对您有所帮助。

编辑

如评论中@Cliabhach所指出,在代码中它看起来会像这样

    text1.typeface = resources.getFont(R.font.Aller_Display)
    text1.fontFeatureSettings = "smcp"

编辑2

注意事项 对于不了解的人 - 小型大写字母只适用于小写字符


在代码中,就是 text1.typeface = resources.getFont(R.font.Aller_Display)text1.fontFeatureSettings = "smcp",对吗? - undefined

0

由于您正在使用 TextView,所以我猜您会在运行时为其设置值,就像您有一个 String 对象将被设置到 TextView 中一样:

textView.setText(someStringObj);

所以你可以通过添加以下代码将其设置为小写:

textView.setText(someStringObj.toLowerCase());

@PaulOst 但在我的情况下它起作用了。原来它只适用于小写字符串。 - undefined
@BArtWell,所以你的问题是你尝试使用小型大写字母,但输入了大写文本 - 我真的没有想到这可能是问题。我以为你知道小型大写字母的工作原理。我会在我的回答中添加这个澄清... - undefined
@PaulOst 是的,示例代码中也有指定。 - undefined
@BArtWell 抱歉 - 没看到 - 是我的错。 - undefined
@PaulOst,是的,我明白了。这个问题需要以这种类型的格式提供文本,但主要原因是文本必须以小写形式填入该属性中。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接