您的位置:首页 > 移动开发 > Android开发

Android EditText里的密码显示可见与不可见

2017-04-05 13:44 141 查看
刚开始我是修改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());
}
}
});


代码都是部分片段,看懂的同学们自己补充哈-_-
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android