Android开发中如何给EditText设置多行效果

来源:互联网 发布:上海博物馆淘宝 编辑:程序博客网 时间:2024/04/25 01:40
最近在做项目的过程中遇到了这个问题,就从网上搜索了一些,但是都没有注释很不好理解,所以就整理下,以供大家学习。
import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.widget.EditText;public class LineEditText extends EditText {//默认的构造函数    public LineEditText(Context context) {super(context);}private Paint linePaint;  //画线需要的画笔    private float margin; //    private int paperColor; //    //EditText构造方法之一    public LineEditText(Context paramContext, AttributeSet paramAttributeSet) {        super(paramContext, paramAttributeSet);        this.linePaint = new Paint(); //新建一个画笔        this.linePaint.setStyle(Paint.Style.STROKE); //设置画笔的风格为空心        this.linePaint.setColor(Color.BLUE); //设置画笔的颜色    }    //写绘画方法    protected void onDraw(Canvas paramCanvas) {        paramCanvas.drawColor(this.paperColor);        int i = getLineCount();  //得到EditText的行数        int j = getHeight();  //得到EditText的高度 单位px        int k = getLineHeight(); //得到每一行的高度        int m =  j / k;       //得到行数                if (i < m)                    {             i = m;        }        int n = getCompoundPaddingTop();//EditText上方的起点,除去了padding的区域        // paramCanvas.drawLine(0.0F, n, getRight(), n, this.linePaint); //在上方顶部画一条线        for (int ii = 0;; ii++) {            if (ii >= i) {                setPadding(10 + (int) this.margin, 0, 0, 0); //设置了下padding                super.onDraw(paramCanvas);  //调用父函数的绘画方法                paramCanvas.restore();                return;            }            n += k;            paramCanvas.drawLine(0.0F, n, getRight(), n, this.linePaint);//在每一行的底部画一条线            paramCanvas.save();  //保存已绘制的对象        }    }}

另外默认的EditText 都有边框的,所以可以在布局文件中

设置android:background="@null"来消除

而且一般EditText的字体都是居中的,所以要设置

android:gravity="top"使得字体居于上方,与画的线吻合。

附xml的使用:


<com.test.EditText.LineEditText        android:layout_width="match_parent"        android:layout_height="170dp"        android:gravity="top"        android:background="@null"        android:textColor="@android:color/black"        android:inputType="textMultiLine" 
/>
注意上述的引用方式跟默认的有所区别。

其余的按照默认使用就可以了。

原创粉丝点击