在我們實際開發中,經常會用到把EditText去掉背景的輸入框,然后加入下划線,就像寫信的信紙一樣,。我們首先會想到設置控件的屬性,但是發現EditText根本就沒有加入下划線這個設置,所以我們得來修改一下EditText,來完成我們的需求。
我們既然要改寫EditText,首先繼承EditText,代碼如下:
1 public class LineEditText extends EditText { 2 // 畫筆 用來畫下划線 3 private Paint paint; 4 5 public LineEditText(Context context, AttributeSet attrs) { 6 super(context, attrs); 7 paint = new Paint(); 8 paint.setStyle(Paint.Style.STROKE); 9 paint.setColor(Color.RED); 10 // 開啟抗鋸齒 較耗內存 11 paint.setAntiAlias(true); 12 } 13 14 @Override 15 protected void onDraw(Canvas canvas) { 16 super.onDraw(canvas); 17 // 得到總行數 18 int lineCount = getLineCount(); 19 // 得到每行的高度 20 int lineHeight = getLineHeight(); 21 // 根據行數循環畫線 22 for (int i = 0; i < lineCount; i++) { 23 int lineY = (i + 1) * lineHeight; 24 canvas.drawLine(0, lineY, this.getWidth(), lineY, paint); 25 } 26 27 } 28 29 }
其中紅色為核心代碼,getLineHeight()方法得到的行高度與我們設置的字體大小有關系,其中canvas.drawLine是畫直線的代碼,參數分別為:開始x坐標,開始y坐標,結束x坐標,結束y坐標,Paint類的對象。 this.getWidth()是父類View的方法獲得控件的寬度。
我們現在准備好自定義的EditText,就開始使用,把自定義控件注冊到main.xml中去,如下所示:
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="fill_parent" 4 android:layout_height="fill_parent" 5 android:background="@android:color/white" 6 android:orientation="vertical" > 7 8 <com.view.demo.view.LineEditText 9 android:layout_width="fill_parent" 10 android:layout_height="wrap_content" 11 android:background="@null" 12 android:textColor="@android:color/black" 13 android:textSize="10pt" > 14 </com.view.demo.view.LineEditText> 15 16 </LinearLayout>
其中<com.view.demo.view.LineEditText/> 標簽的名稱就是這個自定義類的包名+類名 ,android:background="@null"的作用就是去掉EditText的輸入框,好的完成以上步驟,我們就可以在Activity中使用這個自定義控件了,在Activity中引入這個main.xml。運行效果如下:
