EditTextの少しの深い理解について

9926 ワード

最近androidの下のメモ帳プログラムを開発する時、頻繁にEditTextコントロールを使って、振り回して振り回して、それに対する理解はもっと深くなりました.特にこれらの収穫記録は以下の通りである.
一、いくつかの属性の紹介
android:gravity="top"    
このプロパティはtopでカーソルを左上隅に置くことができます(EditTextがフルスクリーンに設定されている場合)
android:background="@null"   
この属性はnullで入力した枠線を取り除くことができます
android:textCursorDrawable="@drawable/ic_launcher" 
このプロパティでは、カーソルをdrawableスタイル(画像1枚)に設定できます.
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) { } });

 
そのため、必要があれば、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があるために自動的に入力をポップアップすることを禁止するには、次の2つの方法があります.
(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でコード動的設定を利用する方法は2つあります.次のようになります.
(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を表示したりするなど).
 
=========================================================================================