(一)问题

之前的自定义EditText只能显示高度不超过屏幕高度的文本内容,继续增加内容会出现如下问题:

(二)原因分析

下部(超出屏幕高度的部分)没有继续画线,也就是说横线没有画够,那么一定是循环控制部分出了问题。

(三)如何解决

1.怎么才能做到每行文字下方都有一条线?

那么首先需要获取文本的行数用EditText.getLineCount();再按行画线即可

2.怎么确定横线的位置?

Y = EditText.getPaddingTop() + EditText.getLineHeight() * index;//Y坐标 = 文本框内上部留白 + 行宽 * 行索引(第几行)

上面的方法是从上往下画线,当然也可以从下往上画线,在此不展开叙述
(四)编码
package com.ayqy.app_test;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.widget.EditText;public class myEditText extends EditText{private int lineColor;//横线颜色private float lineWidth;//横线宽度public myEditText(Context context) {super(context);//设置默认颜色和横线宽度lineColor = Color.BLUE;//默认蓝色线lineWidth = 0.5f;//默认宽度为0.5
    }public myEditText(Context context,int color,float width) {super(context);//设置颜色和横线宽度this.lineColor = color;this.lineWidth = width;}@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stub
        super.onDraw(canvas);//创建画笔Paint mPaint = new Paint();mPaint.setStrokeWidth(lineWidth);mPaint.setStyle(Paint.Style.FILL);mPaint.setColor(lineColor);//获取参数int padL = this.getPaddingLeft();//获取框内左边留白int padR = this.getPaddingRight();//获取框内右边留白int padT = this.getPaddingTop();//获取框内顶部留白int lines = this.getLineCount();//获取行数float size = this.getTextSize();//获取字体大小float baseTop = padT + size / 6;//从上向下第一条线的位置/*这里需要说明的是size/6这个值,是偶然测试得到的,近似于行距的一半*为什么不用EditText.getLineSpacingExtra();来获取行距?*因为测试发现若调用EditText的getLineSpacingExtra方法会报NoSuchMethod错误,具体原因不明*测试发现行距的值近似于TextSize的1/3,在需要用到行距的时候可以用这个值来代替getLineSpacingExtra方法* */float gap = this.getLineHeight();//获取行宽//从上向下划线for(int i = 1;i <= lines;i++){canvas.drawLine(padL//startX, baseTop + gap * i//startY, this.getWidth() - padR//endX, baseTop + gap * i//endY
                    , mPaint);}}public int getLineColor() {return lineColor;}public void setLineColor(int color) {this.lineColor = color;}public float getLineWidth() {return lineWidth;}public void setLineWidth(float width) {this.lineWidth = width;}}

P.S.上方的代码注释提到了“测试发现若调用EditText的getLineSpacingExtra方法会报NoSuchMethod错误”,Google之后发现好像没人遇到过这个问题,如有朋友知道答案请在下方留言,谢谢

(五)效果截图

[改进之后的代码完美解决了“文字压线”和“光标压线”的问题,核心就是行距=TextSize/3,行距的存在影响了视图效果,加上半行距就好]

Android EditText如何去除边框添加下划线相关推荐

  1. Android开发之为textView添加下划线,中划线等

    我们在开发应用的时候,尤其是在做商城项目的时候,需要用到原价格以及降价后的价格,这就不可避免用到中划线或者下划线,在原价格上做一个中划线,这样效果更好.那么如何设置中划线或者下划线呢?请看本文. 1. ...

  2. Android 给EditText添加下划线

    在安卓高版本中,默认是有下划线的,其下划线的颜色是由其主题颜色来控制的 <style name="AppTheme" parent="Theme.AppCompat ...

  3. android 下划线edittext,Android实现EditText添加下划线

    在安卓高版本,默认是有下划线的,其默认下划线的颜色是由其主题颜色来控制的! 控制如下: @color/colorPrimary @color/colorPrimaryDark **@color/col ...

  4. linux中文本怎么添加下划线,Android实现EditText添加下划线

    在安卓高版本,默认是有下划线的,其默认下划线的颜色是由其主题颜色来控制的! 控制如下: @color/colorPrimary @color/colorPrimaryDark **@color/col ...

  5. 给EditText添加下划线

    在安卓高版本,默认是有下划线的,其默认下划线的颜色是由其主题颜色来控制的! 控制如下: <style name="AppTheme" parent="Theme.A ...

  6. android textView 替文字添加下划线 删除线

    android textView 替文字添加下划线 删除线 方法1: tv=(TextView)findViewById(R.id.tv); tv.getPaint().setFlags(Paint. ...

  7. css中a标签超链接在新窗口中打开以及超链接去除/添加下划线

    css中a标签超链接属性设置 超链接基本语法: <a href="http://www.baidu.com">点击我会跳转到百度</a> a标签默认颜色为蓝 ...

  8. Android Textview 添加下划线 方法

    Android TextView 添加下划线的简单方法 在res的values资源文件夹下,给String.xml文件添加 <string name="userlicense" ...

  9. delphi edit里面的文字如何添加下划线_标题设计如何处理更吸引人?来看设计高手的实用技巧...

    计是在向用户传递信息,在设计的日常工作中,传递信息的方式大多都是图文相结合的形式,而文字作为信息传递中最直观的表现形式,对于整体而言是至关重要的一环.很多设计师一味强调追求图具有吸引力,而忽略了文字的 ...

最新文章

  1. CSS知识点——可替换元素vs不可替换元素
  2. 拆解一个舵机组成的机器人
  3. bootstrap ui
  4. HDU 2157 How many ways?? 临接矩阵+快速幂
  5. java json的使用,java中json的使用
  6. js 循环拆词_js 各种循环语法
  7. 【转】 onNewIntent调用时机
  8. 设计模式(二)设计模式的本质
  9. ciaodvd数据集的简单介绍_人工智能进阶-CIFAR-10数据集介绍
  10. Spring Boot log4j多环境日志级别的控制
  11. 为什么美女不愿意过苦日子?
  12. HDU 2588 GCD 【Euler + 暴力技巧】
  13. matlab在电气信息类专业中的应用,MATLAB在电气信息类专业中的应用(高等学校应用型特色规划...
  14. redis安装及使用
  15. ngrok小米球的使用
  16. Android开发指南-窗口小部件(App Widgets)
  17. 继续教育自动听课软件_2017继续教育挂机软件下载
  18. idea破解版下载 + 最常用快捷键记录
  19. APP性能测试(手机端和服务端)
  20. 科目二学车经验(手动挡C1)

热门文章

  1. ASCII码对应表chr(9)、chr(10)、chr(13)、chr(32)、chr(34)、chr(39)、chr(.. 以及oracle中使用chr
  2. Zsh vs. Bash不完全对比解析,zsh是一种更强大的被成为“终极”的Shell
  3. 了解JavaScript 对象的属性操作
  4. 聊一聊js中的null、undefined与NaN
  5. 恶意软件、Rootkit和僵尸网络
  6. video processing on Mac and iOS
  7. 根据信号灯状态解决网络故障
  8. Android的短信接收类
  9. 内网之工作组、域 分析
  10. 汇编语言 循环控制指令