Android 设置密码文本是否暂时显示字符

Posted 峥嵘life

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 设置密码文本是否暂时显示字符相关的知识,希望对你有一定的参考价值。

android 设置密码文本是否暂时显示字符

文章目录

本文指的是Edittext为密码类型的字符串的控制显示。
比如密码字符串默认可以短暂显示,需要按下后不显示,那是可以控制的。

一、效果

系统Setting 隐私权中是有开关控制的,如下图所示:

具体效果,如下:
默认(短暂显示密码字符串)效果和设置不显示密码类型字符串效果,如下:

二、实现

1、设置和获取密码是否可见

实现其实很简单,如下代码即可:

//设置密码是否短暂可见
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属性值是需要权限的

<uses-permission android:name="android.permission.WRITE_SETTINGS"
tools:ignore="ProtectedPermissions" />

该权限是系统权限,需要系统应用才能得到。

2、实际修改的Settings的属性

从Settings.java 代码看:

/**
* Setting to showing password characters in text editors. 1 = On, 0 = Off
*/
public static final String TEXT_SHOW_PASSWORD = "show_password";

3、adb控制密码是否短暂可见

所以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的处理,但是里面真的有具体的逻辑吗?

以上是关于Android 设置密码文本是否暂时显示字符的主要内容,如果未能解决你的问题,请参考以下文章

android EditText密码框,怎么让它只显示密码点,不让它显示最后一位输入的字符?

iostextField文本框基本使用

如何在 Android 文本视图中设置字体宽度?

Android Edittext密码类型显示字符串修改实现

Android Edittext密码类型显示字符串修改实现

在android中怎样设置textview的文本