EditText自定义下划线
来源:互联网 发布:淘宝rol是指什么 编辑:程序博客网 时间:2024/05/21 10:37
一、解决设置padding问题
如果EditText设置padding属性,下划线和文字就无法匹配。
解决逻辑:
1.获取四边padding的值
int paddingLeft = getPaddingLeft(); int paddingRight = getPaddingRight(); int paddingTop = getPaddingTop(); int paddingBottom = getPaddingBottom();
2.划线时,设置drawLine
canvas.drawLine(0 + paddingLeft, lineY + paddingBottom, textWidth + paddingLeft, lineY + paddingBottom, paint);
二、解决设置gravity问题
如果EditText中设置了android:gravity="right"或者android:gravity="left"的话,下划线和文字会分别出现在左右方向。
解决逻辑:
1.由于EditText中gravity的判断非常麻烦
单纯靠 getGravity() 和 Gravity.LEFT 、Gravity.RIGHT 判断是不准确的。
2.在LineEditText 中设置新的属性 sit,来判断gravity位置。
public static final int sitLeft = 1; public static final int sitRight = 2; private int sit = sitRight;
3.划线前,判断sit
if (sit == sitLeft) { canvas.drawLine(0 + paddingLeft, lineY + paddingBottom, textWidth + paddingLeft, lineY + paddingBottom, paint); } else if (sit == sitRight) { canvas.drawLine(lineWidth - paddingRight, lineY + paddingBottom, lineWidth - paddingRight - textWidth, lineY + paddingBottom, paint); } else {//暂不支持复杂 canvas.drawLine(0, lineY, textWidth, lineY, paint); }
三、解决数字键盘问题
如果EditText中设置了数字键盘 android:inputType="number",下划线就无法出现。
解决逻辑:
1. android:inputType="number|text"也无法显示下划线
2. 先去掉xml文件中的 inputType设置,再在java文件中设置
String digits = "0123456789.";etValue.setKeyListener(DigitsKeyListener.getInstance(digits));
四、代码如下
public class LineEditText extends EditText { // 画笔 用来画下划线 private Paint paint; public static final int sitLeft = 1; public static final int sitRight = 2; private int sit = sitRight; private boolean hasLine = true; public LineEditText(Context context) { super(context); paint = new Paint(); paint.setStyle(Paint.Style.STROKE); paint.setColor(ContextCompat.getColor(context, R.color.text_line)); // 开启抗锯齿 较耗内存 paint.setAntiAlias(true); } public LineEditText(Context context, AttributeSet attrs) { super(context, attrs); paint = new Paint(); paint.setStyle(Paint.Style.STROKE); paint.setColor(ContextCompat.getColor(context, R.color.text_line)); // 开启抗锯齿 较耗内存 paint.setAntiAlias(true); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (hasLine) { // 得到总行数 int lineCount = getLineCount(); // 得到每行的高度 int lineHeight = getLineHeight(); //获取padding上下左右 int paddingLeft = getPaddingLeft(); int paddingRight = getPaddingRight(); int paddingTop = getPaddingTop(); int paddingBottom = getPaddingBottom(); // 判断gravity // int gravity = Integer.parseInt(String.valueOf(getGravity()).substring(0, 1)); // 获取EditText中文字的物理长度 TextPaint mTextPaint = getPaint(); float textWidth = mTextPaint.measureText(getText().toString()); // 根据行数循环画线 for (int i = 0; i < lineCount; i++) { int lineY = (i + 1) * lineHeight; // 得到每行的宽度 int lineWidth = getWidth(); if (sit == sitLeft) { canvas.drawLine(0 + paddingLeft, lineY + paddingBottom, textWidth + paddingLeft, lineY + paddingBottom, paint); } else if (sit == sitRight) { canvas.drawLine(lineWidth - paddingRight, lineY + paddingBottom, lineWidth - paddingRight - textWidth, lineY + paddingBottom, paint); } else {//暂不支持复杂 canvas.drawLine(0, lineY, textWidth, lineY, paint); } } } } public boolean isHasLine() { return hasLine; } public void setHasLine(boolean hasLine) { this.hasLine = hasLine; } public int getSit() { return sit; } public void setSit(int sit) { this.sit = sit; }}
阅读全文
0 0
- EditText 自定义下划线颜色
- EditText自定义下划线
- EditText自定义下划线
- Android 如何自定义EditText 下划线?
- EditText下划线
- Android之自定义EditText光标和下划线颜色
- Android之自定义EditText光标和下划线颜色
- EditText中加入下划线
- 下划线EditText-UnderlineEditText-笔记
- 去除EditText的下划线
- edittext 下划线颜色更改
- 去掉EditText的下划线
- android EditText去掉下划线
- EditText只显示下划线
- 关于EditText去掉下划线
- TextView下划线,EditText搜索
- EditText加下划线
- android Edittext 去除下划线
- 几个让代码读起来更舒服的小技巧
- 二十三种设计模式介绍
- 编写内存分配器
- Leetcode 算法习题 第十四周
- 简单实现SNMP获取系统信息以及网络接口信息
- EditText自定义下划线
- 学习目标(随时更新)
- php实现无限分类
- Jedis基本操作Demo
- TypeError: parse() got an unexpected keyword argument 'transport_encoding'
- 通讯报文中浮点类型的处理
- NVIDIA TK1 学习笔记(3):更新源
- JS 时间与时间戳转换(详解)
- 求两数的最大公约数