1. 程式人生 > >設定密碼輸入框明文和密文切換

設定密碼輸入框明文和密文切換

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