0

単一の EditText フィールドのソフト入力キーボードをオーバーライドしようとしています。私は主に、この優れた例に従ってきました。XML を inputType="text" に設定し、onCreate 内で次のように設定します。

    EditText amount = (EditText) findViewById(R.id.amount_edit_text);
    final EditText amt = amount;
    amount.setOnFocusChangeListener(new OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                showCustomKeyboard(v);
            } else {
                hideCustomKeyboard();
            }
        }
    });

    amount.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            showCustomKeyboard(v);
        }
    });

    amount.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            EditText edittext = (EditText) v;
            int inType = edittext.getInputType();
            edittext.setInputType(InputType.TYPE_NULL);
            edittext.onTouchEvent(event);
            edittext.setInputType(inType);
            return true;
        }
    });

これはほとんどの場合機能します。EditText をクリックすると、カスタム キーボードが表示されますが、常にジャンプします。非常に高速ですが、キーボードが標準キーボードの上に積み重なって表示され、標準キーボードが折りたたまれてキーボードが残されます。そして時々、それは勝手に崩れず、ただ積み重なっていく…

このジャンプなしで標準キーボードを自分のキーボードでオーバーライドする方法はありますか?

4

2 に答える 2

1

カスタムキーボードを表示する前に、 Runnable を使用して標準キーボードを閉じることになりました。完全ではありませんが、以前のように 2 つのキーボードを積み重ねることはできません。私はより良い解決策を探し続けます。

私のOnFocusChangeListenerのelseステートメント内:

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    public void run() {                         
        showCustomKeyboard(v);
    } 
}, 250);

((InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(v.getWindowToken(), 0);
于 2013-06-19T22:40:26.650 に答える
0

次のコードを使用して、自分のソフトキーボードを表示しているときにソフトキーボードを非表示にしてみてください。

InputMethodManager mgr = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(amount.getWindowToken(), 0);
于 2013-06-19T15:59:04.367 に答える