關於EditText的一點深入的瞭解

最近在開發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 等)。

=========================================================================================

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章