Android edittext使用自定义键盘时禁用系统软键盘但却不禁用光标

我有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了,完美方案

你可能感兴趣的:(android界面小技巧)