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