天天看點

Android開發中如何給EditText設定多行效果

最近在做項目的過程中遇到了這個問題,就從網上搜尋了一些,但是都沒有注釋很不好了解,是以就整理下,以供大家學習。

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" 
           
/>
           

注意上述的引用方式跟預設的有所差別。

其餘的按照預設使用就可以了。

繼續閱讀