1. 程式人生 > >【安卓基礎】ImageView與EditText聯動實現隱藏與顯示密碼

【安卓基礎】ImageView與EditText聯動實現隱藏與顯示密碼

圖標 復用 聯動 set mage imageview 通過 create 實現

項目中經常會有這樣的需求,在密碼輸入框的右邊有一個小圖標,點擊就切換顯示和隱藏密碼。

其實這裏需求實現起來是比較容易的,主要考慮是復用問題,因為登陸、註冊、修改密碼界面都會有這樣的情景,如果每個界面都獨立寫一次這樣的邏輯顯然是不符合代碼復用的理念,所以需要把這個情景抽象出來,用代碼去實現一個工具庫。

首先必須說一說EditText的inputType了,當我們在XML中指定EditText的inputType為textPassword時,輸入的內容會以星號呈現。

 <EditText
            android:id="@+id/edittext"
            android:layout_width
="wrap_content" android:layout_height="wrap_content" android:inputType="textPassword" />

現在當程序運行的時候,輸入的內容呈現為密碼的形式,當我們點擊顯示密碼的小圖標,我們需要讓EditText顯示輸入的內容,我們可以通過代碼改變EditText的inputType。

if (hidePwd == true) { // 輸入的內容顯示為星號
    uiPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
} 
else { // 正常顯示輸入內容 uiPassword.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); }

通常密碼輸入框右邊有個小圖標,點擊會切換顯示/隱藏密碼,同時小圖標在顯示和隱藏狀態中的圖標是不一樣的。現在針對小圖標點擊,然後切換密碼框的輸入狀態,把這種行為抽象出來成為一個函數。

// image : 小圖標
// editor : 輸入框
// showingDrawable : 顯示密碼時的小圖標
// hidingDrawable : 隱藏密碼時的小圖標
public static void bingPwdSwitch(final
ImageView image, final EditText editor, final int showingDrawable, final int hidingDrawable) { image.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (image.getTag().equals("1") || image.getTag() == null) { image.setTag("0"); image.setImageResource(showingDrawable); } else { image.setTag("1"); image.setImageResource(hidingDrawable); } if (image.getTag().equals("1") || image.getTag() == null) { editor.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); } else { editor.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); } } }); }

這是使用View的getTag()方法,EditText在XML中的inputType為textPassword,在Activity的onCreate()中調用函數進行綁定即可。

bingPwdSwitch(uaShowHidePwd, uiPassword, R.mipmap.login_ic_pwd, R.mipmap.login_ic_unpwd);

【安卓基礎】ImageView與EditText聯動實現隱藏與顯示密碼