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 关闭标准键盘。它不是很完美,但它没有像以前那样堆叠两个键盘。不过,我会继续寻找更好的解决方案。

在我的 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 回答