我有private EditText edittext;
在使用自定义键盘时必须要禁用系统软件盘时必须使用:edittext.setInputType(InputType.TYPE_NULL); // disable soft input
但这样会使得EditText失去了所有的输入属性(例如光标,尽管你可以通过代码给该edittext赋值,但是却再也拥有不了一个闪烁的光标)
要想既禁用系统键盘,又能有自己想要的InputType(一个有光标、所有符号都有相同宽度的InputType),可以如下做法:
1、给EditText设置你想要的InputType:edittext.setInputType(InputType.TYPE_CLASS_TEXT |InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
2、给EditText添加OnTouchListener:
edittext.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
int inType = edittext.getInputType(); // backup the input type
edittext.setInputType(InputType.TYPE_NULL); // disable soft input
edittext.onTouchEvent(arg1); // call native handler
edittext.setInputType(inType); // restore input type
return true;
}
});
3、给EditText添加字符监听(用来设置光标):
edittext.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable arg0) {
edittext.setSelection(edittext.length());
}
};);
到此就OK了,完美方案