删除TextView上下内边距

原理参考: https://blog.csdn.net/harvic880925/article/details/50423762

通过自定义控件删除上下内边距, UI走查时就不用担心间距不对了。


image.png

代码:

public class MyTextView extends TextView {

  public MyTextView(Context context) {
    super(context);
  }

  public MyTextView(Context context, AttributeSet attrs) {
    super(context, attrs);

    setGravity(getGravity() | Gravity.CENTER_VERTICAL);
    setIncludeFontPadding(false);
  }

  public MyTextView(Context context,  AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
  }

  @Override protected void onDraw(Canvas canvas) {
    Paint.FontMetrics fm = getPaint().getFontMetrics();
    if (fm != null) {
      if (getScrollY() != (int)(fm.ascent-fm.top)) {
        setScrollY((int) (fm.ascent - fm.top));
      }
    }

    super.onDraw(canvas);
  }

  @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    int padding = 0;
    Paint.FontMetrics fm = getPaint().getFontMetrics();
    if (fm != null) {
      padding = (int) Math.abs(fm.top - fm.ascent) + (int) Math.abs(fm.bottom - fm.descent);
      int width = getMeasuredWidth();
      int heiht = getMeasuredHeight();

      if (getText().toString().contains("g")
           || getText().toString().contains("y")
           || getText().toString().contains("p")) {
        setMeasuredDimension(width, heiht - padding);
      } else {
        setMeasuredDimension(width, heiht - padding - (int)(getTextSize()*0.1));
      }
    }
  }

缺陷:
因为无法判断TextView的字符下边界是否超过其它字符, 如果都是中文就没问题。 但p、q、g等字符下边界比较低, 这类字符需要单独判断, 可能会漏掉一些字符。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在此特此声明:一下所有链接均来自互联网,在此记录下我的查阅学习历程,感谢各位原创作者的无私奉献 ! 技术一点一点积...
    远航的移动开发历程阅读 13,892评论 12 197
  • IOS常用代码总结 1、设置UILabel行间距 NSMutableAttributedString* attrS...
    难却却阅读 3,669评论 0 0
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,664评论 4 61
  • 1、设置UILabel行间距 NSMutableAttributedString* attrString = [[...
    FF_911阅读 5,275评论 0 3
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,345评论 1 45

友情链接更多精彩内容