android spannable取消下划线,斜体,加粗

spannable加粗方式 :

       StyleSpan styleSpan = new StyleSpan(Typeface.BOLD);
        editable.setSpan(styleSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

如果要更新stylespan 需要调用 stylespan的 updateMeasureState 方法 而这个方法会调用stylespan的私有方法
private static void apply(Paint paint, int style) {
int oldStyle;

    Typeface old = paint.getTypeface();
    if (old == null) {
        oldStyle = 0;
    } else {
        oldStyle = old.getStyle();
    }

    int want = oldStyle | style;

    Typeface tf;
    if (old == null) {
        tf = Typeface.defaultFromStyle(want);
    } else {
        tf = Typeface.create(old, want);
    }

    int fake = want & ~tf.getStyle();

    if ((fake & Typeface.BOLD) != 0) {
        paint.setFakeBoldText(true);
    }

    if ((fake & Typeface.ITALIC) != 0) {
        paint.setTextSkewX(-0.25f);
    }

    paint.setTypeface(tf);
}

看这个方法可知 当穿入的style为0时,是无法改变当前span样式的 ,所以,如果需要取消加粗,可以重写stylespan的
updateDrawState方法 如下 :

  @Override
public void updateDrawState(TextPaint ds) {
    Typeface typeface = ds.getTypeface();
    ds.setFakeBoldText(false);
    ds.setTextSkewX(0);
    if (typeface!=null){
        ds.setTypeface(Typeface.create(typeface,Typeface.NORMAL));
    }else {
        ds.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容