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

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;
看红色的部分!


  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值