16

EditTextフィールドの[完了]ボタンを上書きするために、Androidコードを少し使用しました。

   myEditField.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_DONE) {

                mySubroutine();

                return true;
            }
            return false;
        }
    });

フィールドをアクティブにするとキーボードが呼び出され、[完了]を押すとmySubroutine()が正常に評価されます。ただし、「完了」を押してもキーボードが消えなくなりました。このデフォルトの動作をルーチンに戻すにはどうすればよいですか?

4

4 に答える 4

55

なぜだめですか:

myEditField.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
        if (actionId == EditorInfo.IME_ACTION_DONE) { 

            mySubroutine(); 
        } 
        return false; 
    } 
}); 

コードを処理した後、falseを返すだけです。これは、コード(mySubroutine())が何を実行しても、その後もデフォルトのアクションを使用すると解釈できます。「true」を返すと、あなたは幸せなコーダーであり、実行する必要のあるすべてがmySubroutine()で行われ、デフォルトのアクションはアクションを実行する必要がないことを示しています。

于 2010-08-10T13:48:43.340 に答える
13

次の手順でキーボードを閉じることができます。

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getWindowToken(), 0);
于 2010-04-18T12:51:34.277 に答える
8

次のコードを実行するボタンにonClickListenerをアタッチする必要があります。

InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editview.getWindowToken(), 0);
于 2010-09-01T12:03:05.383 に答える
0

私も同じ問題を抱えていました。editText VISIBILITYがGONEからVISIBLEに変更された直後に、フォーカスを設定してソフトキーボードを表示する必要がありました。私は次のコードを使用してこれを達成しました:

        (new Handler()).postDelayed(new Runnable() {

        public void run() {              yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
            yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));                       

        }
    }, 200);
于 2016-08-11T16:39:37.983 に答える