美文网首页控件与三方的依赖
android TextView 设置和取消删除线

android TextView 设置和取消删除线

作者: 穿越平行宇宙 | 来源:发表于2019-05-17 08:59 被阅读2次

    一、TextView 设置删除线有两种方式:

    (推荐)方式一:

    通过按位或运算符|,将 TextView 原本的 Flags 属性和删除线一块设置。setPaintFlags内会对 TextView 进行重绘。

      tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
    

    方式二:

    获取画笔后设置属性,重绘 TextView 。此方式有个问题,会把 TextView 原本的 Flags 属性替代,例如抗锯齿等。仔细查看,你会发现通过这种方式,文字有了锯齿。

      tv.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
      tv.invalidate();
    

    二、TextView 取消删除线有两种方式:

    (推荐)方式一:

    先对 Paint.STRIKE_THRU_TEXT_FLAG 属性取反,再用按位与运算符&,除去了删除线属性并保留了 TextView 原本的 Flags 属性。setPaintFlags内会对 TextView 进行重绘。

    tv.setPaintFlags(tv.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
    

    方式二:

    获取画笔后,清空 Flags 属性,再重绘 TextView 。此方式有个问题,会把 TextView 原本的所有 Flags 属性清空,例如抗锯齿等。仔细查看,你会发现通过这种方式,文字有了锯齿;

      tv.getPaint().setFlags(0);
      tv.invalidate();
    

    由代码可知,setPaintFlags()有刷新过程。而getPaint()返回TextPaint,此类继承于Paint,Paint.setFlags()是native函数,且TextPaint没有对其进行复写,无法进一步分析原因了。

    相关文章

      网友评论

        本文标题:android TextView 设置和取消删除线

        本文链接:https://www.haomeiwen.com/subject/hylyaqtx.html