我正在尝试覆盖单个EditText字段的软输入键盘。我主要关注这个excellent example - 将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会显示我的自定义键盘,但总会有跳跃。它非常快,但它会显示我的键盘堆叠在标准键盘的顶部,然后标准键盘将崩溃,我的键盘将被留下。有时,它会随意崩溃,只是堆叠......
有没有办法在没有跳转的情况下用我自己的键盘覆盖标准键盘?
答案 0 :(得分: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);
答案 1 :(得分:0)
使用以下代码时,尝试隐藏softKeyboard:
InputMethodManager mgr = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(amount.getWindowToken(), 0);