2

私のアプリでは、URLを入力するための編集テキストがあり、編集テキストには次のものがあります。

android:imeOptions="actionDone"

そのため、誰かがキーボードの Enter ボタンを押すと、アプリが接続され、キーボードが閉じられます。ただし、入力コマンドを使用する代わりにクリックできるボタンもあります。この場合、他のスレッドで提案されている典型的な方法を使用してキーボードを閉じるのではなく、ソフトキーボードの完了ボタンが押されたかのようにシミュレートします。これが私がそれを行う方法です:

v.findViewById(R.id.button1)
    .setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            edit.dispatchKeyEvent(new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER, 0));

        edit.dispatchKeyEvent(new KeyEvent(0, 0, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_ENTER, 0));
        }
    }); 

アクションのリスナーがあり、イベントをキャッチします。

public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
    Log.e(TAG, "Key event received "+actionId);
    if (actionId == EditorInfo.IME_ACTION_DONE || 
            (event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP)  ){
        Log.e(TAG, "Key event received  will connect");
        onConnectToServer(null);
        return true;
    }else if(event.getKeyCode() == KeyEvent.KEYCODE_ENTER) return true;
    return false;
}

しかし、エラーが発生し、キーイベントが100回送信され、キーコードが入力ボタンとして認識されないようです。他の方法でキーボードを閉じたくない理由:

InputMethodManager imm = InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mFilterEditText.getWindowToken(), 0);

そのコードの後、別のフラグメントで表示する必要があるときにキーボードが自動的に再び表示されないためです(+アクティビティは1つしかなく、多くのフラグメントがあるため、マニフェストに設定できません)任意のアイデア? ありがとう

4

1 に答える 1

3

信じられないほど簡単だった:

edi3.onEditorAction(EditorInfo.IME_ACTION_DONE);
于 2013-02-20T14:59:04.147 に答える