删除TextView上下内边距
来源:brycegao     阅读:509
源码超市
发布于 2019-03-26 00:29
查看主页

原理参考: 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等字符下边界比较低, 这类字符需要单独判断, 可能会漏掉少量字符。

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 服务器应用
相关推荐
我写CSS的常用套路(附demo的效果实现与源码)
Mac 下ssh/sftp挂载远程文件夹
web前台入门到实战:CSS自己设置属性+CSS Grid网格实现超级的布局能力
如何取一个全网唯一的昵称?参考这个项目
dismissViewControllerAnimated:completion:你使用对了吗?
首页
搜索
订单
购物车
我的