欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android程序開發(fā)之防止密碼輸入錯誤 密碼明文顯示功能

 更新時間:2016年02月19日 17:11:47   作者:SpikeKing  
在使用App的時候,首次登錄都需要用戶輸入密碼的,有些朋友為了安全起見密碼設(shè)置的比較長,導(dǎo)致很多次密碼都輸入錯誤,嚴(yán)重影響了用戶體驗效果,下面通過本文給大家介紹Android程序開發(fā)之防止密碼輸入錯誤 密碼明文顯示功能,需要的朋友參考下

在使用App的時候,首次登錄都需要用戶輸入密碼的,有些朋友為了安全起見密碼設(shè)置的比較長,導(dǎo)致很多次密碼都輸入錯誤,嚴(yán)重影響了用戶體驗效果。這一點移動開發(fā)者做好了準(zhǔn)備工作,因為手機的私密性比較強,在輸入密碼的時候,可以顯示輸入,增強準(zhǔn)確性,提升用戶體驗度。這當(dāng)然要付出代價的,需要額外的代碼編寫功能。下面通過本文給大家介紹如何編寫密碼明文顯示的功能,僅供參考。

Password

本文源碼的GitHub下載地址

要點

(1) 重寫EditText, 添加提示密碼顯示和隱藏的圖片.

(2) 判斷點擊位置, 切換EditText的密碼顯示狀態(tài).

(3) 在屏幕旋轉(zhuǎn)或配置改變時, 保留圖片的狀態(tài)信息.

實現(xiàn)只有一個類和兩個圖片資源, 大家可以自由定制.

1. 布局樣式

兩種密碼的顯示樣式, 一種是常規(guī)顯示, 一種是TextInputLayout顯示.

<LinearLayout
android:id="@+id/main_ll_container_1"
android:layout_width="match_parent"
android:layout_height="40dp"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密碼:"
android:textSize="20sp"/>
<me.chunyu.spike.wcl_password_input_demo.PasswordEditText
android:id="@+id/main_pet_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:hint="請輸入密碼"/>
</LinearLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/main_ll_container_1">
<me.chunyu.spike.wcl_password_input_demo.PasswordEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:hint="請輸入密碼"/>
</android.support.design.widget.TextInputLayout>

效果

效果

2. 提示圖標(biāo)

初始化資源和布局, 獲取密碼圖片的資源, 監(jiān)聽EditText, 有文字時顯示圖標(biāo), 沒有文字時隱藏圖標(biāo).

// 初始化布局
public void initFields(AttributeSet attrs, int defStyleAttr) {
if (attrs != null) {
// 獲取屬性信息
TypedArray styles = getContext().getTheme().obtainStyledAttributes(attrs, R.styleable.PasswordEditText, defStyleAttr, 0);
try {
// 根據(jù)參數(shù), 設(shè)置Icon
mShowPwdIcon = styles.getResourceId(R.styleable.PasswordEditText_pet_iconShow, mShowPwdIcon);
mHidePwdIcon = styles.getResourceId(R.styleable.PasswordEditText_pet_iconHide, mHidePwdIcon);
} finally {
styles.recycle();
}
}
// 密碼狀態(tài)
setInputType(EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_PASSWORD);
addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.length() > 0) {
// 有文字時顯示指示器
showPasswordVisibilityIndicator(true);
} else {
mIsShowPwdIcon = false;
restorePasswordIconVisibility(mIsShowPwdIcon);
showPasswordVisibilityIndicator(false); // 隱藏指示器
}
}
@Override public void afterTextChanged(Editable s) {
}
});
}

setInputType設(shè)置密碼狀態(tài), TYPE_TEXT_VARIATION_PASSWORD密文狀態(tài).

通過pet_iconShow屬性, 可以選擇自定義密碼提示圖片.

3. 監(jiān)聽事件

點擊圖片, 切換顯示或隱藏密碼, 獲取點擊位置, 和圖片位置進行比較, 判斷事件.

@Override public boolean onTouchEvent(MotionEvent event) {
if (mDrawableSide == null) {
return super.onTouchEvent(event);
}
final Rect bounds = mDrawableSide.getBounds();
final int x = (int) event.getRawX(); // 點擊的位置
int iconX = (int) getTopRightCorner().x;
// Icon的位置
int leftIcon = iconX - bounds.width();
Log.e(TAG, "x: " + x + ", leftIcon: " + leftIcon);
// 大于Icon的位置, 才能觸發(fā)點擊
if (x >= leftIcon) {
togglePasswordIconVisibility(); // 變換狀態(tài)
event.setAction(MotionEvent.ACTION_CANCEL);
return false;
}
return super.onTouchEvent(event);
}

切換明文或密文的密碼

// 設(shè)置密碼指示器的狀態(tài)
private void restorePasswordIconVisibility(boolean isShowPwd) {
if (isShowPwd) {
// 可視密碼輸入
setInputType(EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
} else {
// 非可視密碼狀態(tài)
setInputType(EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_PASSWORD);
}
// 移動光標(biāo)
setSelection(getText().length());
}

4. 保存狀態(tài)

重寫SavedState, 在旋轉(zhuǎn)屏幕時, 保存和恢復(fù)顯示圖片信息.

// 存儲密碼狀態(tài), 顯示Icon的位置
protected static class PwdSavedState extends BaseSavedState {
private final boolean mShowingIcon;
private PwdSavedState(Parcelable superState, boolean showingIcon) {
super(superState);
mShowingIcon = showingIcon;
}
private PwdSavedState(Parcel in) {
super(in);
mShowingIcon = in.readByte() != 0;
}
public boolean isShowingIcon() {
return mShowingIcon;
}
@Override
public void writeToParcel(Parcel destination, int flags) {
super.writeToParcel(destination, flags);
destination.writeByte((byte) (mShowingIcon ? 1 : 0));
}
public static final Parcelable.Creator<PwdSavedState> CREATOR = new Creator<PwdSavedState>() {
public PwdSavedState createFromParcel(Parcel in) {
return new PwdSavedState(in);
}
public PwdSavedState[] newArray(int size) {
return new PwdSavedState[size];
}
};
}

動畫效果

動畫

現(xiàn)在可以把類復(fù)制到應(yīng)用中, 更換圖片資源, 替換顯示密碼框, 給用戶更好的移動端體驗. 永遠追求極致, 追求不凡.

關(guān)于Android程序開發(fā)之防止密碼輸入錯誤 密碼明文顯示功能的相關(guān)知識就給大家介紹到這里,希望對大家有所幫助!

相關(guān)文章

  • Android?WebView軟鍵盤遮擋輸入框方案詳解

    Android?WebView軟鍵盤遮擋輸入框方案詳解

    這篇文章主要介紹了Android?WebView軟鍵盤遮擋輸入框方案詳解,本文提供了一種新的解決?WebView?輸入框被軟鍵盤遮擋的思路,不過這種思路也有它的局限性,目前來看僅適用于全屏的?WebView?中,需要的朋友可以參考下
    2022-06-06
  • Android實現(xiàn)快速滾動FastScrollView效果

    Android實現(xiàn)快速滾動FastScrollView效果

    這篇文章主要介紹了Android實現(xiàn)快速滾動FastScrollView效果,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Android ProgressBar進度條使用詳解

    Android ProgressBar進度條使用詳解

    ProgressBar進度條,分為旋轉(zhuǎn)進度條和水平進度條,進度條的樣式根據(jù)需要自定義,這篇文章主要介紹了Android ProgressBar進度條使用方法,感興趣的小伙伴們可以參考一下
    2016-02-02
  • 文件緩存(配合JSON數(shù)組)

    文件緩存(配合JSON數(shù)組)

    這篇文章主要介紹了文件緩存(配合JSON數(shù)組)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • Android自定義View實現(xiàn)雪花特效

    Android自定義View實現(xiàn)雪花特效

    這篇文章主要為大家詳細介紹了Android自定義View實現(xiàn)雪花特效,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • Android相機啟動加速詳解

    Android相機啟動加速詳解

    本篇文章給大家詳細分析了Android實現(xiàn)相機啟動加速的相關(guān)知識點內(nèi)容以及實例代碼,有興趣的朋友參考下。
    2018-07-07
  • 淺談RxJava處理業(yè)務(wù)異常的幾種方式

    淺談RxJava處理業(yè)務(wù)異常的幾種方式

    本篇文章主要介紹了淺談RxJava處理業(yè)務(wù)異常的幾種方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Android采用消息推送實現(xiàn)類似微信視頻接聽

    Android采用消息推送實現(xiàn)類似微信視頻接聽

    這篇文章主要為大家詳細介紹了Android采用消息推送實現(xiàn)類似微信視頻接聽,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • AOSP源碼下載示例代碼

    AOSP源碼下載示例代碼

    這篇文章主要介紹了AOSP源碼下載,由于清華源中給出很清晰的配置下載方法,這兒只做幾條總結(jié),對AOSP源碼感興趣的朋友一起看看吧
    2022-08-08
  • Android發(fā)送xml數(shù)據(jù)給服務(wù)器的方法

    Android發(fā)送xml數(shù)據(jù)給服務(wù)器的方法

    這篇文章主要介紹了Android發(fā)送xml數(shù)據(jù)給服務(wù)器的方法,以實例形式較為詳細的分析了Android發(fā)送XML數(shù)據(jù)及接收XML數(shù)據(jù)的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09

最新評論