android开发带下划线的多行文本框

最近写的一个多行文本框,要带下划线的,但是效果并不是很好,但是勉勉强强地算是有下划线了,原理是计算每一行的行高,然后重写EditText的onDraw()方法,在这里面将下画线一个个给画出来,源码:

package com.study.mylabel.UI;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.EditText;

/**
 * Created by wan on 2016/3/25.
 * 带下划线的编辑框
 */
public class EditTextMultiLine extends EditText{
    /*
     * 文本框的背景颜色
     */
    private int backColor;
    /*
     * 画线的画笔
     */
    private Paint linePaint;
    /*
     * 画笔画线的颜色
     */
    private int paintColor;
    /*
     * 每一行的高度
     */
    private int lineHeight;
    /*
     * 行数
     */
    private int count;

    /**
     * 自定义的UI类应该拥有这个构造器,否则将不能xml文件将不能加载这个UI类
     * @param context 必须
     * @param attrs 必须拥有
     */
    public EditTextMultiLine(Context context, AttributeSet attrs) {
        super(context, attrs);
        backColor = Color.rgb(249, 246, 230);
        linePaint = new Paint();
        paintColor = Color.rgb(160, 155, 145);
    }

    /**
     * 在这个方法里面画出下划线出来
     * @param canvas 画布
     */
    public void onDraw(Canvas canvas) {
        //画背景颜色
        canvas.drawColor(backColor);
        //获取行的高度
        lineHeight = getLineHeight();
        count = getHeight() / lineHeight;
        //记录画到哪一行
        int nextLine = 0;
        //因为这个组件可能给它设置了边距,所以要先画第一条线
        nextLine = getCompoundPaddingTop();
        //给画笔设置颜色
        linePaint.setColor(paintColor);
        canvas.drawLine(0.0F, nextLine, getRight(), nextLine, linePaint);
        //画线
        for(int i = 0; i < getLineCount(); i++) {
            nextLine += lineHeight;
            canvas.drawLine(getLeft(), nextLine, getRight(), nextLine, linePaint);
            canvas.save();
        }
        //画出光标,让他能够编辑
        super.onDraw(canvas);
    }

}

效果如下:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值