Android EditTextのsetOnEditorActionListenerメソッド

9838 ワード

変換元:https://blog.csdn.net/u010041075/article/details/65445043およびhttp://www.cnblogs.com/haochuang/p/3571754.html
(1)コントロールEditTextのsetOnEditorActionListenerメソッドの使用
私たちの携帯電話では、通常、入力ソフトキーボードの右下隅がリターンボタンになりますが、異なる編集ボックスをクリックすると、入力ソフトキーボードの右下隅に異なるアイコンが表示されることがよくあります.例えば、ブラウザのURLバーをクリックすると、入力ソフトキーボードの右下隅が「GO」または「行きます.Google検索ボックスをクリックすると、入力ソフトキーボードの右下隅が拡大鏡または「検索」になります.このアイコンの変換を決定するパラメータは、EditTextのandroid:imeOptionsプロパティです.
説明:setOnEditorActionListenerという方法は、EditTextをクリックしたときにトリガーされるのではなく、EditTextを編集したときにトリガーされるのではなく、編集が終わった後にソフトキーボードのさまざまなキーをクリックしてトリガーされることに注意してください.
レイアウトファイルのimeOptionsでは、ソフトウェアディスクの右下隅にあるボタンを異なるボタンとして表示するように制御できます.そのため、EditorInfoと組み合わせることで、さまざまなソフトキーボードの機能を実現することができます.
各種属性対応:
  • imeOptions=”actionUnspecified” –> EditorInfo.IME_ACTION_UNSPECIFIED
  • imeOptions=”actionNone” –> EditorInfo.IME_ACTION_NONE
  • imeOptions=”actionGo” –> EditorInfo.IME_ACTION_GO
  • imeOptions=”actionSearch” –> EditorInfo.IME_ACTION_SEARCH
  • imeOptions=”actionSend” –> EditorInfo.IME_ACTION_SEND
  • imeOptions=”actionNext” –> EditorInfo.IME_ACTION_NEXT
  • imeOptions=”actionDone” –> EditorInfo.IME_ACTION_DONE

  • 使用法
  • レイアウトで定義されたEditTextコントロール
  •  
  • 編集可能editTextコントロール
  • を定義する
    EditText ET_phone = (EditText) findViewById(R.id.ET_phonenumber);
  • setOnEditorActionListenerメソッド
  • を追加
    ET_phone.setOnEditorActionListener(new OnEditorActionListener() {  
                @Override  
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {  
                   if (actionId == EditorInfo.IME_ACTION_DONE) {   
                    //       ,     imeOptions  
                    text.setText("Editing EditorInfo.IME_ACTION_DONE");  
                    return false;   //  true,     。false,     
                    }
                }  
            });  

    注意:false表示に戻ってクリックすると、ソフトキーボードが非表示になります.trueを返すと、ソフトキーボードが保持されていることを示します.
     
    (2)android:inputTypeおよびandroid:imeOptions
    Androidソフトウェアディスクイベント応答:
    Androidでは、EditTextに対してソフトウェアディスクのリスニングを実現するシーンが必要になる場合があります.Androidがソフトキーボードを押すと、応答が完了、送信、検索、または他のイベントに応答します.
    Googleは、EditorInfo、KeyEventのいくつかの方法を提供し、私たちが必要とする機能を実現することができます.詳細は検討可能:EditorInfo.ClassとKeyEventclass.
     
    Enterキーを入力してキーボードを非表示にする方法:
    レイアウトに複数のEditTextが含まれている場合は、各EditTextコントロールにandroid:singleLine="true"を設定し、最後にフォーカスを取得した後にDoneと表示されるまで、イジェクトされたFD入力方式では、戻るキーがnextになります.Doneをクリックすると、ソフトキー入力盤が非表示になります.EditTextのimeOptionsプロパティをandroid:imeOptions="actionDone"に設定すると、最後のEditTextかどうかにかかわらず、リターンキーをクリックすると入力方式が非表示になります.
    Enterのイベントをリスニングし、Enterのイベントレスポンスを作成します.テキストボックスのOnKeyListenerをkeyCode=KeyEventとして設定します.KEYCODE_Enterの場合、Enterキーが押されていることを示し、自分のイベントレスポンス機能を記述することができます.
    XMLファイルは次のとおりです.
    1 2 3 4 5 6 7 8 9 10 11 12 13 14           android:id= "@+id/editTextId"           android:layout_width= "fill_parent"           android:layout_height= "50dp"           android:imeOptions= "actionDone"           android:hint= "@string/task_new_one"           android:textSize= "15sp"           android:singleLine= "true"           android:paddingLeft= "5dp"           android:layout_gravity= "center"           android:background= "@drawable/rectangle"           android:inputType= "text"           >  
      
    EditTextのIme Optionsプロパティを異なる値に設定し、Enterキーに異なる文字やパターンを表示できます.ActionNone:Enterキーを押して、次の行にカーソルを合わせます.ActionGo:Go,actionSearch:1つの拡大鏡actionSend:Send actionNext:Next actionDone:Done、最後のテキスト入力ボックスでなくてもソフトキーボードを非表示にします.
    android:imeOptionsを変更することで、デフォルトのキーボード表示テキストを変更します.一般的な定数値は次のとおりです.
  • actionUnspecifiedは指定されておらず、定数EditorInfoに対応する.IME_ACTION_UNSPECIFIED.効果:
  • actionNoneは動作せず、定数EditorInfoに対応する.IME_ACTION_NONE効果:
  • actionGo行き、定数EditorInfoに対応する.IME_ACTION_GO効果:
  • actionSearch検索、定数EditorInfoに対応.IME_ACTION_SEARCH効果:
  • actionSend送信、定数EditorInfoに対応する.IME_ACTION_SEND効果:
  • actionNext次は定数EditorInfoに対応する.IME_ACTION_NEXT効果:
  • actionDoneが完成し、定数EditorInfoに対応する.IME_ACTION_DONE効果:
  • JAVAコード:
    EditText inputText = (EditText) findViewById(R.id. editTextId);   
    inputText.setImeOptions(EditorInfo.IME_ACTION_DONE);
    

     
    リスニングイベントを追加するには、次の手順に従います.
    private final EditText.OnEditorActionListener editorActionListener =
               new TextView.OnEditorActionListener() {
                   @Override
                   public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                       if (actionId == KeyEvent.ACTION_DOWN || actionId == EditorInfo.IME_ACTION_DONE) {
                           //    
                           haoMent.createTest(Test.getId(), v.getText().toString());
                           UiUtils.hideSoftKeyboard(getApplicationContext(), haoTest.this);
                           v.setText("");
                           v.clearFocus();
                           handler.post(updateView);
                       }
                       return true;
                   }
              };
    

    しかし、携帯電話の入力方式が内蔵入力方式ではなく、他の第三者入力方式であれば、ソフトウェアディスクのリターンキーが応答しないという問題が発生する可能性があります.このようなことを防ぐために、赤い部分を増やし、応答するキーイベント.
    この場合、コードにイベント応答を追加する必要があります.
    
    inputKey = (EditText) findViewById(R.id.contactSearch_editText);
    inputKey.addTextChangedListener(watcher);
     
    inputKey.setOnKeyListener(new View.OnKeyListener() {
    @Override
      public boolean onKey(View v, int keyCode, KeyEvent event) {
        
     
      if (KeyEvent.KEYCODE_ENTER == keyCode && event.getAction() == KeyEvent.ACTION_DOWN) {
        handler.post(updateView);
        return true;
      }
      return false;
      }
    });
    //      
    public TextWatcher watcher = new TextWatcher() {
     
      @Override
      public void beforeTextChanged(CharSequence charSequence, int i, int i2,int i3) {
     
      }
     
      @Override
      public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
     
      }
     
      @Override
      public void afterTextChanged(Editable editable) {
     
      handler.post(updateView);
     
      }
    };
    

     
    Android入力タイプ:
    入力する内容に応じて対応するソフトウェアディスクを表示し、android:inputTypeを変更することで実現できます.
    これはよく使われる入力タイプです.
    android:inputType="none"--      
    android:inputType="text"--      
    android:inputType="textCapCharacters"--      
    android:inputType="textCapWords"--       
    android:inputType="textCapSentences"--        
    android:inputType="textAutoCorrect"--       
    android:inputType="textAutoComplete"--       
    android:inputType="textMultiLine"--    
    android:inputType="textImeMultiLine"--     (     )
    android:inputType="textNoSuggestions"--   
    android:inputType="textUri"--URI  
    android:inputType="textEmailAddress"--        
    android:inputType="textEmailSubject"--      
    android:inputType="textShortMessage"--     
    android:inputType="textLongMessage"--     
    android:inputType="textPersonName"--    
    android:inputType="textPostalAddress"--    
    android:inputType="textPassword"--    
    android:inputType="textVisiblePassword"--      
    android:inputType="textWebEditText"--           
    android:inputType="textFilter"--      
    android:inputType="textPhonetic"--      
    android:inputType="number"--    
    android:inputType="numberSigned"--       
    android:inputType="numberDecimal"--           
    android:inputType="phone"--    
    android:inputType="datetime"
    android:inputType="date"--    
    android:inputType="time"--    
    

     
    パスワードボックス属性android:password="true"はEditTextに表示される内容を自動的にアスタリスクにし、入力すると内容が1秒以内に*文字になります.
    純数字android:numeric=「true」は入力方式を自動的にデジタル入力キーボードに変え、0-9のデジタル入力のみを許可する
    androidのみ許可:capitalize=「haoTest」は入力haoTestのみ許可され、一般的にパスワード検証に使用されます
    android:editable="false"設定EditText編集不可
    Android:singleLine=「true」強制入力内容は単行
    Android:ellipsize=「end」はテールオーバーフローデータを自動的に非表示にし、一般的に文字内容が長すぎて1行もすべて表示できない場合に使用されます