Android WebView从数字输入类型切换到密码输入类型

时间:2014-09-29 06:29:05

标签: android jquery keyboard android-webview

我有一个webview,我有3种输入类型

  1. 文本
  2. 密码
  3. 当我从数字切换到文本输入字段时,qwerty键盘会按预期打开。当我从文本切换到密码时,qwerty键盘打开,没有任何需要和预期的建议。但问题是,当我从数字键切换到密码输入字段时,数字键盘打开但我希望它是qwerty,所​​以我可以在密码字段中默认输入字母

    我这样做是为了覆盖我的webview onCreateInputConnection。下面的代码与此问题无关,因为此代码用作在数字小键盘上显示十进制键的解决方案,默认情况下不存在。但我知道有些事情需要在这里改变才能解决我的问题

    @Override
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
        super.onCreateInputConnection(outAttrs);
        if ((outAttrs.inputType & InputType.TYPE_CLASS_NUMBER) == InputType.TYPE_CLASS_NUMBER)
        {
            outAttrs.inputType |= InputType.TYPE_NUMBER_FLAG_DECIMAL;
        }
        else
        {
            outAttrs.inputType |=InputType.TYPE_CLASS_TEXT;
            InputConnection connection = super.onCreateInputConnection(outAttrs);
            return connection;
        }
         return new ExtendedInputConnection(this,false);
    }
    

    这是ExtendedInputConnection类,仅供参考。这里我添加了方法,以便发送退格键控事件并由JQuery

    捕获
    public class ExtendedInputConnection extends BaseInputConnection implements InputConnection{
    
    
    public ExtendedInputConnection(View targetView, boolean fullEditor) {
        super(targetView, fullEditor);
        // TODO Auto-generated constructor stub
    }
    
    @Override
    public boolean deleteSurroundingText(int beforeLength, int afterLength) {       
        // in latest Android, deleteSurroundingText(1, 0) will be called for backspace
        if (beforeLength == 1 && afterLength == 0) {
            // backspace
            return super.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
        }
    
        return super.deleteSurroundingText(beforeLength, afterLength);
    }
    }
    

1 个答案:

答案 0 :(得分:0)

对您来说可能更有用,而不是使用|=添加更多标志,只需使用=运算符分配它们,否则您将堆叠不同的标志,从而导致不期望的行为:

案例1:InputType.TYPE_NUMBER_FLAG_DECIMAL

案例2:InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE

案例3:InputType.TYPE_TEXT_VARIATION_PASSWORD

这应该可以解决问题。

希望它有所帮助!