本文指的是Edittext为密码类型的字符串的控制显示。
比如密码字符串默认可以短暂显示,需要按下后不显示,那是可以控制的。
系统Setting 隐私权中是有开关控制的,如下图所示:
具体效果,如下:
默认(短暂显示密码字符串)效果和设置不显示密码类型字符串效果,如下:
实现其实很简单,如下代码即可:
//设置密码是否短暂可见
public void setIsShowPasswordChecked(boolean isChecked) {
Settings.System.putInt(mContext.getContentResolver(), Settings.System.TEXT_SHOW_PASSWORD,isChecked ? 1 : 0);
}
//获取密码是否短暂可见
public boolean isShowPasswordShortTime() {
return 1 == Settings.System.getInt(mContext.getContentResolver(), Settings.System.TEXT_SHOW_PASSWORD, 1);
}
获取属性值是不需要权限的,但是设置Settings属性值是需要权限的
该权限是系统权限,需要系统应用才能得到。
从Settings.java 代码看:
/**
* Setting to showing password characters in text editors. 1 = On, 0 = Off
*/
public static final String TEXT_SHOW_PASSWORD = "show_password";
所以adb 也可以控制:
//获取是否设置密码短暂显示(默认/未设置前为null)
adb shell settings get system show_password
//设置密码短暂显示
adb shell settings put system show_password 1
//设置密码不短暂显示
adb shell settings put system show_password 0
至于为啥修改一个属性,就能马上起作用,应该是系统有地方监听了Settings.System.TEXT_SHOW_PASSWORD值的改变做了相关操作;
但是具体是系统哪里的代码,这就不知道了!喜欢研究的可以看看。
并且为啥EditText设置属性android:inputType=“textPassword”,
就可以显示*代替字符串,也是可以研究的,按道理是EditText/View的处理,但是里面真的有具体的逻辑吗?