最近在開發android下的記事本程式時,頻繁的使用EditText控件,折騰來折騰去,算是對其的了解更深入了一些。特将這些收獲記錄如下:
一、幾個屬性的介紹
android:gravity= "top"
這個屬性為top可以将光标置于左上角(當EditText設為全屏時)
android:background= "@null"
這個屬性為null可以将輸入的框線去掉
android:textCursorDrawable= "@drawable/ic_launcher"
這個屬性可以設定光标為drawable樣式(可以為一張圖檔)
android:editable= "false"
這個屬性為false,則EditText不可編輯。 注意是僅僅不能進行輸入,但是EditText的滾動什麼的還是可以響應的。
android:enabled="false"
這個屬性為false,則EditText也是不可編輯。 注意不僅不可編輯,連滾動什麼的都不可以響應,是以可以說是直接讓EditText不可用。
android:cursorVisible="false“
這個屬性為false,則EditText的光标不可見。
android:focusableInTouchMode= "false"
這個屬性為false,則EditText不響應觸摸模式的焦點,或者說觸摸事件不可用。
===========================================================================================
二、監聽EditText的輸入
可以使用TextWatcher來監聽EditText的輸入。使用方法如下:
Et.addTextChangedListener(new TextWatcher() {
//S:變化後的所有字元;start:字元起始的位置;before: 變化之前的總位元組數;count:變化後的位元組數
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
//s:變化前的所有字元; start:字元開始的位置; count:變化前的總位元組數;after:變化後的位元組數
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
//s:變化後的所有字元
public void afterTextChanged(Editable s) {
}
});
是以如果有需要,或者對EditText做一些個性化的設定,即可以使用addTextChangedListener來為EditText添加監聽器!
=========================================================================================
三、制作隻讀的EditText控件
首先說明一下需求: 該EditText隻會禁止輸入,但是可以檢視,滾動和觸摸什麼的都會響應,也就是說僅僅是禁止輸入而已! 不妨稱之為隻讀模式。
怎麼制作出一個這樣子的EditText呢?網上有很多辦法,我幾乎都一一試過,但是所使用的方法都無法達到滿意。比如:
(1)如果通過設定android:editable屬性來使EditText不可輸入。這個雖然能完美的達到要求。 但是,當EditText又需要恢複可輸入狀态時,沒有相應的動态代碼來恢複!
(2)如果使用 android:enabled屬性,則會使EditText整個不可用,也就是說不僅不可輸入,連滾動什麼的都不用了。
最後,理了理思路,終于解決了這個問題。達到我的預期: 即EditText隻讀模式達到了,在恢複其可編輯狀态時也能很容易的恢複。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
我的做法如下:
制作出一個隻讀模式的EditText
其實很簡單進行下面兩步設定即可:
(1)隻讀模式,當然不需要顯示光标了。在xml中設定如下即可:
android:cursorVisible="false“
(2)隻讀模式當然不需要彈出輸入法了,輸入法不彈出,當然就不能編輯了。為了點到EditText不讓彈出輸入法,我們隻需讓其對觸摸事件不響應即可:
android:focusableInTouchMode="false"
經過上面兩步簡單的設定,就可以讓EditText為隻讀模式了。
然後恢複EditText為可編輯:
根據上面的設定,是以想要将EditText恢複為可編輯狀态,隻需要下面兩行代碼即可:
editText.setFocusableInTouchMode(true);
editText.setCursorVisible(true);
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
另外需要說明的是,也可以利用下面的方法動态的設定EditText的可輸入與不可輸入狀态。
動态設定EditText不可輸入任何字元
//設定EditText不可輸入。但保留滑動,可點選等屬性。隻是不可輸入而已
et.setFilters(new InputFilter[] { new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start,
int end, Spanned dest, int dstart, int dend) {
return source.length() < 1 ? dest.subSequence(dstart, dend) : "";
}
} });
這樣,利用上面的代碼,即使你利用輸入鍵盤輸入,也無法輸入到EditText中。對應的,相應的恢複輸入可采用下面的代碼:
//設定輸入法可以輸入(或者叫恢複輸入)
et.setFilters(new InputFilter[] { new InputFilter() {
public CharSequence filter(CharSequence source, int start,
int end, Spanned dest, int dstart, int dend) {
// TODO Auto-generated method stub
return null;
}
} });
=================================================================================
四、不自動彈出輸入法的鍵盤
當你的布局中含有一個EditText中的時候,你會發現隻要你進入這個活動的界面,輸入法鍵盤就會自動彈出來。在你不打算首先給EditText做輸入的時候,
這個自動彈出的輸入法則是非常惹人讨厭的!是以可以利用下面的兩種辦法來禁止因為有了EditText而自動彈出輸入法:
(1)方法一
經過測驗,如果EditText和TextView在一起的話,那麼輸入法就不會自動彈出。這是由于TextView本身的特性導緻的。順便說一句,EditText本身就是繼承自TextView的。
是以,你可以放一個TextView到你的布局中,來防止自動彈出輸入法。
(2)方法二
還可以利用代碼動态設定不彈出輸入法。隻需要在合适的地方,寫下下面的代碼即可。下面的代碼就是讓EditText預設不顯示軟鍵盤,隻有當被點選的時候才會顯示出軟鍵盤
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE |
WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
=========================================================================================
五、設定EditText顯示為密碼格式
有兩種方式,即在xnl中和利用代碼動态設定。如下:
(1)方式一
android:inputType="textPassword"
(2)方式二
edit.setTransformationMethod(PasswordTransformationMethod.getInstance());
inputType即為輸入字元的類型。在這裡網上有個很好的總結,如下:
1 android:inputType參數類型說明
2 android:inputType="none"--輸入普通字元
3 android:inputType="text"--輸入普通字元
4 android:inputType="textCapCharacters"--輸入普通字元
5 android:inputType="textCapWords"--單詞首字母大小
6 android:inputType="textCapSentences"--僅第一個字母大小
7 android:inputType="textAutoCorrect"--前兩個自動完成
8 android:inputType="textAutoComplete"--前兩個自動完成
9 android:inputType="textMultiLine"--多行輸入
10 android:inputType="textImeMultiLine"--輸入法多行(不一定支援)
11 android:inputType="textNoSuggestions"--不提示
12 android:inputType="textUri"--URI格式
13 android:inputType="textEmailAddress"--電子郵件位址格式
14 android:inputType="textEmailSubject"--郵件主題格式
15 android:inputType="textShortMessage"--短消息格式
16 android:inputType="textLongMessage"--長消息格式
17 android:inputType="textPersonName"--人名格式
18 android:inputType="textPostalAddress"--郵政格式
19 android:inputType="textPassword"--密碼格式
20 android:inputType="textVisiblePassword"--密碼可見格式
21 android:inputType="textWebEditText"--作為網頁表單的文本格式
22 android:inputType="textFilter"--文本篩選格式
23 android:inputType="textPhonetic"--拼音輸入格式
24 android:inputType="number"--數字格式
25 android:inputType="numberSigned"--有符号數字格式
26 android:inputType="numberDecimal"--可以帶小數點的浮點格式
27 android:inputType="phone"--撥号鍵盤
28 android:inputType="datetime"
29 android:inputType="date"--日期鍵盤
30 android:inputType="time"--時間鍵盤
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
在這裡再插一句吧。 說一下EditText或者TextView中的setInputType和setTransformationmethod方法。
(1)setinputType可以設定EditText(TextView也可以)的輸入方式。比如Contact、Email、Date、Time、Short Message、Normal Text、Password 等。
還可以指定各種更正選項,如 單詞首字母大寫、句子首字母大寫、自動更正等。下面的代碼是一個使用範例:
int inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT
| InputType.TYPE_TEXT_FLAG_MULTI_LINE | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT
| InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE;
EditText.setInputType(inputType);
(2) setTransformationMethod則可以支援将輸入的字元轉換,包括清除換行符、轉換為掩碼。使用方法:
textView.setTransformationMethod(PasswordTransformationMethod.getInstance());
綜合來說,如果需要實作自己的轉換,可以通過實作 TransformationMethod 接口來達到你的目的(比如讓輸入的所有字元都變成 a,或者輸入 a 顯示 z,輸入 z 顯示 a 等)。
=========================================================================================