最近在做項目的過程中遇到了這個問題,就從網上搜尋了一些,但是都沒有注釋很不好了解,是以就整理下,以供大家學習。
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"
/>
注意上述的引用方式跟預設的有所差別。
其餘的按照預設使用就可以了。