设置密码输入框明文和密文切换
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; 看红色的部分!
