设置密码输入框明文和密文切换

1.笨方法是设置标志位或者根据isSelected属性、isChecked属性什么的来改变。

2.我想的是,既然xml中有android:inputType这个属性,那么代码中直接用getInputType()方法得到它的输入类型,然后和它的各种属性比较不就能判断嘛,于是我就这么干了

//切换密码是否可见
case R.id.pwdIsVisible:
    int isVisible = mInputPwd.getInputType();
    Log.d("aa", "isVisible: " + isVisible);
    Log.d("aa", "TYPE_TEXT_VARIATION_PASSWORD: "+InputType.TYPE_TEXT_VARIATION_PASSWORD);
    Log.d("aa", "TYPE_TEXT_VARIATION_VISIBLE_PASSWORD: "+InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
    if (isVisible == InputType.TYPE_TEXT_VARIATION_PASSWORD) {
        mPwdIsVisible.setImageResource(R.drawable.password_visible);
        mInputPwd.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
    }else{
        mPwdIsVisible.setImageResource(R.drawable.password_unvisible);
        mInputPwd.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
    }
    break;
结果发现并不可行,打印log一看,getInputType()方法得到的是129(我默认xml中定义的是textPassword,即不可见状态),而它不可见状态的值是128,可见状态的是144,在切换成可见之后它的值却是145,老是差1。在经过了一番番百度之后,改成了下面这样

//切换密码是否可见
case R.id.pwdIsVisible:
    int isVisible = mInputPwd.getInputType();
    Log.d("aa", "isVisible: " + isVisible);
    Log.d("aa", "TYPE_TEXT_VARIATION_PASSWORD: "+InputType.TYPE_TEXT_VARIATION_PASSWORD);
    Log.d("aa", "TYPE_TEXT_VARIATION_VISIBLE_PASSWORD: "+InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
    if (isVisible == (InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD)) {
        mPwdIsVisible.setImageResource(R.drawable.password_visible);
        mInputPwd.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
    }else{
        mPwdIsVisible.setImageResource(R.drawable.password_unvisible);
        mInputPwd.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD);
    }
    break;
具体原因目前不知道,只知道这样做才能和实际的值匹配。

我又发现切换后会自动把cursor放在最前面,这让我十分不爽,于是我把cursor弄回来了

//切换密码是否可见
case R.id.pwdIsVisible:
    int isVisible = mInputPwd.getInputType();
    int cursorPosition = mInputPwd.length();
    Log.d("aa", "isVisible: " + isVisible);
    Log.d("aa", "TYPE_TEXT_VARIATION_PASSWORD: "+InputType.TYPE_TEXT_VARIATION_PASSWORD);
    Log.d("aa", "TYPE_TEXT_VARIATION_VISIBLE_PASSWORD: "+InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
    if (isVisible == (InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD)) {
        mPwdIsVisible.setImageResource(R.drawable.password_visible);
        mInputPwd.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
        mInputPwd.setSelection(cursorPosition);
    }else{
        mPwdIsVisible.setImageResource(R.drawable.password_unvisible);
        mInputPwd.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD);
        mInputPwd.setSelection(cursorPosition);
    }
    break;
看红色的部分!


你可能感兴趣的:(摸索)