EditText不消失的提示文字,在提示文字後進行輸入
阿新 • • 發佈:2019-01-02
先給個效果圖來說明本文要實現的目的:
輸入前效果:
輸入後的效果:
一般來講,輸入框的提示文字都是用類似android:hint="手機號/郵箱"”的hint屬性來進行設定的,但hint只是在輸入框為空的時候才顯示提示文字,因此,如果想實現提示文字一直存在,並且使用者輸入時從提示文字之後開始輸入內容,那麼就需要對EditText動動“手腳”了。
(android:drawableLeft和圖片相結合的實現方法在此就不討論了,因為一旦修改文字就必須更換圖片,筆者不推薦。)
首先我們編寫一個繼承自EditText的類,覆蓋它的onDraww方法,關鍵程式碼如下:
這裡的類名可以隨便取,筆者以ABC代替。當然,EditText的字號、顏色等都可以自己設定,“15,55”是提示文字的xy位置,可以根據需要設定。public class ABC extends EditText { public ABC(Context context) { super(context); } @Override public void onDraw(Canvas canvas){ Paint paint = new Paint(); paint.setTextSize(28); paint.setColor(Color.RED); canvas.drawText("請輸入您的名字:", 15, 55, paint); super.onDraw(canvas); } }
其實以上程式碼是會出現錯誤的,先暫時放著,下文會有交待。
在佈局檔案xml中建立一個EditText,關鍵程式碼如下:
設定的paddingLeft是為了給提示文字預留120dp的顯示位置。com.yourname.ABC則是你的ABC.java檔案所在的包名。<com.yourname.ABC android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingLeft="120dp" android:ems="10" />
到了這裡,大家會看到如下的情景:
這是因為我們建立的EditText是用XML佈局檔案中的這些引數,我們的構造器要載入這些引數,並把它們傳遞給父類的構造器。
那就是構造器沒寫完整,其實很簡單,新增幾行程式碼即可,完整的關鍵程式碼如下:
這下就不會有問題了。執行後的效果便如本文開頭所示。public class ABC extends EditText { public ABC(Context context) { super(context); } public ABC(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public ABC(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void onDraw(Canvas canvas){ Paint paint = new Paint(); paint.setTextSize(28); paint.setColor(Color.RED); canvas.drawText("請輸入您的名字:", 15, 55, paint); super.onDraw(canvas); } }