输入法的调用:
由于只是向EditText中输入内容,所以使用android自带的方法,具体代码应该在android源码的TextView中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
@Override publicbooleanonKeyUp(intkeyCode, KeyEvent event) { if(!isEnabled()) { returnsuper.onKeyUp(keyCode, event); } switch(keyCode) { caseKeyEvent.KEYCODE_DPAD_CENTER: /* * If there is a click listener, just call through to * super, which will invoke it. * * If there isn't a click listener, try to show the soft * input method. (It will also * call performClick(), but that won't do anything in * this case.) */ if(mOnClickListener == null) { if(mMovement!= null&& mTextinstanceofEditable && mLayout!= null&& onCheckIsTextEditor()) { InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(this, 0); } } |
按键的拦截:
我的拦截方式是当输入法界面显示的时候,拦截所有按键,包括home(之所以拦截home,是因为我们的home键是由双击操作产生的。而在使用输入法时,很容易误操作双击,导致前面输入的内容都白输了,结果用户很伤心)。具体就是设置一个mIsMainViewShow的boolean型标志,分别在onWindowShown和onWindowHide中设置为true、false。在onKeyUp和onKeyDown中判断是否拦截按键。为什么要拦截按键呢?问的好。因为我的输入法不是为触屏设计的,而是为一个只有五向键的设备设计的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
@Override publicvoidonWindowHidden() { mIsMainViewShown= false; } @Override publicvoidonWindowShown() { mIsMainViewShown= true; } @Override publicbooleanonKeyDown(intkeyCode, KeyEvent event) { super.onKeyDown(keyCode, event);//父类对back键的处理 if(mIsMainViewShown) { //do something return true; } else{ return false; } } @Override publicbooleanonKeyUp(intkeyCode, KeyEvent event) { super.onKeyUp(keyCode, event); if(mIsMainViewShown) { //do something return true; else{ return false; |
不同输入模式的选择:
主要是只对于不同输入框,可能有的输入框需要是输入法显示的时候默认显示数字键盘,有的需要拼音,有的需要字母等等。这些都是在onStartInput中做的。
1 2 3 4 5 6 7 8 |
@Override publicvoidonStartInput(EditorInfo info, booleanrestarting) { if(getCurrentInputEditorInfo().inputType== InputType.TYPE_CLASS_NUMBER) {// 数字键盘 } elseif((getCurrentInputEditorInfo().inputType& InputType.TYPE_MASK_FLAGS) == (InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS)) {// 小写英文字母键盘 } elseif((getCurrentInputEditorInfo().inputType& InputType.TYPE_MASK_VARIATION) == (InputType.TYPE_TEXT_VARIATION_PASSWORD)) { } |
0 条评论