2013-04-09 12 views
8

ユーザーがeditTextでEnterキーを押したときに、単にイベントをキャッチしたいだけです。OnEditorActionListenerが機能しない

私はToastメッセージを受け取っていませんでした。「Enter pressed」ではなく「Some pressed pressed!」ではありませんでした。どちらか。

何が間違っていますか?

myEditText.setOnEditorActionListener(new OnEditorActionListener() { 

    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 

    Toast.makeText(getApplicationContext(), "Some key pressed!", Toast.LENGTH_LONG).show(); 

     if (event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { 
      Toast.makeText(getApplicationContext(), "Enter pressed", Toast.LENGTH_LONG).show(); 
       return true; 
       } 
       return false; 
      } 
     }); 

E D I T:

まあそれは、Android 2.3.3に取り組んで、私はすべてのAndroidデバイス上でこの作業を行うことができますどのように任意のアイデア 4.1.2上で動作していませんか?

+0

Edittextに関連するすべてのイベントに対してTextWatcherを使用することができます –

答えて

1
myEditText.setOnEditorActionListener(new OnEditorActionListener() { 

public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) { 
    Toast.makeText(getApplicationContext(), "some key pressed", Toast.LENGTH_LONG) 
         .show(); 
    return false; 
} 
}); 

このコードは、私のEditTextで何かを入力した後、キーを入力したときに押されたいくつかのキーがを押した私を表示されます。しかし、私はあなたのコードで何が問題ではありません。

25

EditTextをシングルラインモードに設定してください。

editText.setSingleLine(); 

したり、XMLレイアウトファイルで:

android:singleLine="true" 

android:singleLine="true" UPDATEが推奨されていません。今から、プログラムで設定するために、この動作

editText.setMaxLines(1); 
editText.setInputType(InputType.TYPE_CLASS_TEXT); 

を達成するためandroid:inputType="text"android:maxLines="1"を使用しています。

+2

「textPersonName」などの他の入力タイプも機能します(私はそれらが改行文字を禁止すると思います) –

+0

@CameronKetcham:そうです。 "InputType.TYPE_TEXT_VARIATION_PASSWORD"は –

+0

あなたが私の一日を保存した神も機能します! –

1

android:imeOptions="actionGo"をxmlで使用します。 actionDoneは、onEditorActionに応答しなくなりました。

+0

アクションは、nexus 6p、nougat 7.1で動作します。 – murt

1

私の問題は、XMLをandroid:inputType="textMultiline"に設定していたことでした。 textMultilineオプションを削除すると、EditorListenerが機能し始めました。