字体样式Typeface.ITALIC在Galaxy Note 2上无法正常工作

11

我正在开发一个应用程序,有时我想根据要显示的数据将TextView的字体变为斜体。

在我的Galaxy Nexus手机上,这只是一个简单的步骤:

textView.setTypeface(font, iWantItalics ? Typeface.ITALIC : Typeface.NORMAL);

它工作得很好。

问题是我有一个新的Galaxy Note II要测试,但是......没有,没有斜体字。

阅读Samsung设备支持setTypeface(Typeface.Italic)吗?,我得到的印象是这是Note Android版本的bug,因此Roboto字体根本没有斜体。我已经尝试了那个线程和其他类似线程上的每个建议(Typeface.defaultFromStyle(Typeface.ITALIC)Typeface.create(null, Typeface.ITALIC)等),但没有成功。

我的问题在于,那个线程中的人使用的解决方法是将Roboto TTF复制到assets目录中,并从那里创建字体,但是对于手机中具有另一种默认字体的用户怎么办?我不想强制他们使用Roboto或者,更糟糕的是,在字体为正常字体且Roboto斜体字体时,使用其他字体。

有人有什么主意吗?谢谢。


我创建了你提到的问题。值得一提的是,我从来没有找到其他处理不正确工作设备的方法。很抱歉带来这个坏消息。不过,我真诚希望有人能提出更好的解决方案 =) - FoamyGuy
在这样一款高端全新的设备中出现如此愚蠢的错误,真是令人难以置信,不是吗? - Serandel
我在三星论坛上引起了一位开发者的注意,所以还是有希望的。 :) http://developer.samsung.com/forum/thread/typefaceitalic-not-working-on-galaxy-note-2/77/209984 - Serandel
1
在我的三星Galaxy Tab 2上,也不起作用。 - thomaus
@thomaus 看看我的答案,也许对你有帮助! - David Wasser
2个回答

14

为了解决这个问题,你可以这样设置文本斜体(在出现故障的三星设备上似乎有效):

textView.setText(setTextStyleItalic(textView.getText());

你需要使用这个方法:

public static CharSequence setTextStyleItalic(CharSequence text) {
    final StyleSpan style = new StyleSpan(Typeface.ITALIC);
    final SpannableString str = new SpannableString(text);
    str.setSpan(style, 0, text.length(), 0);
    return str;
}

运行得很好。干得好! - Serandel

4
另一个简单的解决方法是这样做:
myTextView.setText(Html.fromHtml("<i>" + myString + "</i>"));

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