加粗的xml方式:
(4.4以前是無法加粗中文的,現在4.4以下幾乎沒有,可以忽略)
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold" />
代碼僞方式:
(這個和上面有點差別,仔細對比會發現比上面細)
tv.getPaint().setFakeBoldText(true);
tv.invalidate()//必須觸發重繪
正确的代碼方式:
tv.setTypeface(null, Typeface.NORMAL);
tv.invalidate();
如果自定義字型的話,你會發現加粗能用,但怎麼都無法取消加粗:
tv.setTypeface(tv.getTypeface(), Typeface.NORMAL);//無效
tv.invalidate();
事實上被源碼坑了一波:
public void setTypeface(@Nullable Typeface tf, @Typeface.Style int style) {
if (style > 0) {
if (tf == null) {
tf = Typeface.defaultFromStyle(style);
} else {
tf = Typeface.create(tf, style);//加粗時會建立加粗字型
}
setTypeface(tf);
// now compute what (if any) algorithmic styling is needed
int typefaceStyle = tf != null ? tf.getStyle() : 0;
int need = style & ~typefaceStyle;
mTextPaint.setFakeBoldText((need & Typeface.BOLD) != 0);
mTextPaint.setTextSkewX((need & Typeface.ITALIC) != 0 ? -0.25f : 0);
} else {
mTextPaint.setFakeBoldText(false);
mTextPaint.setTextSkewX(0);
setTypeface(tf);//取消時并沒有建立加粗字型
}
}
是以取消加粗時你需要自己create一個:
tv.setTypeface(Typeface.create(tv.getTypeface(), Typeface.NORMAL), Typeface.NORMAL);
tv.invalidate();