Android EditText裡的密碼顯示可見與不可見
阿新 • • 發佈:2019-01-29
剛開始我是修改EditText的inputType,這個就是EditText的輸入模式。我之前也是想修改這個inputType的,這個在xml裡面修改可以,程式碼是這樣的:
android:inputType=”textPassword”
(密碼不可見)android:inputType=”textVisiblePassword”
( 可見密碼) 有兩種模式。但是想在java程式碼裡面動態修改貌似改顯示與不可見,貌似只能從可見模式轉為可見模式,但是轉不回去。若有大神可以從可見模式轉為不可見模式的告訴我哈,我也學習學習-_-程式碼如下:
- 動態修改inputType
//從密碼不可見模式變為密碼可見模式(行得通)
et_password.setInputType (InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
//從密碼可見模式變為密碼不可見模式(行不通)
et_password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
我也閱讀InputType裡面的原始碼,也沒發現inputType從密碼不可見模式可以轉為可見模式
inputType裡面的部分原始碼說明如下如下:
/**
* Variation of {@link #TYPE_CLASS_TEXT}: entering a password, which should
* be visible to the user.
*/
public static final int TYPE_TEXT_VARIATION_VISIBLE_PASSWORD = 0x00000090;
/**
* Variation of {@link #TYPE_CLASS_TEXT}: entering a password.
*/
public static final int TYPE_TEXT_VARIATION_PASSWORD = 0x00000080;
- 解決方法 動態修改TransformationMethod
//從密碼不可見模式變為密碼可見模式
et_password.setTransformationMethod (HideReturnsTransformationMethod.getInstance());
//從密碼可見模式變為密碼不可見模式
et_password.setTransformationMethod(PasswordTransformationMethod.getInstance());
下面來一個小demo
效果圖:
- xml佈局檔案 一個線性佈局裡面左右各方一個ImageButton,中間放一個EditText,圖片自己找喔
<!--請輸入密碼-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="10dp"
android:background="@drawable/login_background"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="20dp"
android:layout_height="25dp"
android:layout_marginLeft="10dp"
android:src="@drawable/icon_coupon" />
<EditText
android:id="@+id/et_password"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/transparent"
android:hint="@string/input_password"
android:imeOptions="actionDone"
android:inputType="textPassword"
android:paddingLeft="5dp"
android:textColor="@color/black"
android:textSize="16sp" />
<ImageView
android:id="@+id/iv_eye"
android:layout_width="20dp"
android:layout_height="25dp"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:src="@drawable/icon_eye" />
</LinearLayout>
- 上面的LinearLayout的background com_btn_background.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<!--描邊-->
<stroke
android:width="1.0dp"
android:color="#ededed" />
<!--填充顏色-->
<solid android:color="#ffffff" />
</shape>
- LinearLayout右邊的圖片有一個選擇器selector icon_eye.xml如下(圖片自己找哈):
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/icon_eye_closs" android:state_selected="false" />
<item android:drawable="@drawable/icon_eye_show" android:state_selected="true" />
</selector>
- java程式碼如下:
private EditText et_password;
private ImageView ivEye;
private boolean isOpenEye = false;
//繫結id
et_password = (EditText) v.findViewById(R.id.et_password);
ivEye = (ImageView) v.findViewById(R.id.iv_eye);
//密碼是否可見
ivEye.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(!isOpenEye) {
ivEye.setSelected(true);
isOpenEye = true;
//密碼可見
et_password.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
}else{
ivEye.setSelected(false);
isOpenEye = false;
//密碼不可見
et_password.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
}
});
程式碼都是部分片段,看懂的同學們自己補充哈-_-