前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android初级】教你用两行代码实现“显示/隐藏密码”的效果

【Android初级】教你用两行代码实现“显示/隐藏密码”的效果

作者头像
netkiller old
发布2021-02-08 19:19:45
1.8K0
发布2021-02-08 19:19:45
举报
文章被收录于专栏:NetkillerNetkiller

Android里面要使用密码的场景是非常多的,支付宝、微信、淘宝以及各大银行APP,都跟用户的密码有关。用户的密码是极为隐私的,用户在输入时不希望密码被别人看到,所以几乎所有需要输入密码的场景下都会把密码隐藏起来,显示成一串的黑点。今天我们就来看下如何实现这个能动态显示密码和隐藏密码的效果。

要实现的功能如下:

  1. 界面上提供一个密码输入框和一个多选框
  2. 勾选多选框,显示密码;反勾选多选框,隐藏密码

该效果的关键两点:

  1. 函数 setTransformationMethod:用于设置 EditText 的字符类型;
  2. 两个类: HideReturnsTransformationMethod:用于正常显示所输入的密码; PasswordTransformationMethod:用于隐藏所输入的密码

源代码如下:

1、主Activity

代码语言:javascript
复制
import android.app.Activity;import android.os.Bundle;import android.text.Selection;import android.text.Spannable;import android.text.method.HideReturnsTransformationMethod;import android.text.method.PasswordTransformationMethod;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.EditText;import com.example.memorydemo.R;
public class ShowPasswordDemo extends Activity {
    @Override    protected void onCreate(Bundle onSavedInstance) {        super.onCreate(onSavedInstance);        setContentView(R.layout.show_password_demo);
        final EditText editText = findViewById(R.id.editTextPassword);        CheckBox checkBox = findViewById(R.id.checkBoxShowPassword);        checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {            @Override            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                if (isChecked) {
                    // 用户想要显示密码                    editText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());                } else {
                    // 用户想要隐藏密码                    editText.setTransformationMethod(PasswordTransformationMethod.getInstance());                }            }        });    }}

2、布局文件 show_password_demo.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:layout_width="match_parent"              android:layout_height="match_parent"              android:orientation="vertical">
    <EditText            android:paddingTop="20dp"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:hint="请输入密码:"            android:ems="10"            android:id="@+id/editTextPassword"/>    <CheckBox            android:text="显示密码"            android:layout_width="match_parent"            android:layout_height="wrap_content" android:id="@+id/checkBoxShowPassword"            android:layout_marginTop="10dp"/>
</LinearLayout>

3、效果图如下

细心的你会注意到,每次显示密码或隐藏密码后,光标自动移动到最开始的位置了。

为了解决这个问题,我们要在 CheckBox 的stateChange事件后,手动将光标移动到末尾,在 onCheckedChanged 的后面添加如下代码:

代码语言:javascript
复制
// 切换后将 EditText的光标置于末尾CharSequence charSequence = editText.getText();if (charSequence != null) {    Spannable spanText = (Spannable) charSequence;    Selection.setSelection(spanText, charSequence.length());}

优化后的效果如下:

往期推荐

【Android初级】如何实现一个具有选择功能的对话框效果

【Android初级】如何实现一个“模拟后台下载”的加载效果

【Android初级】如何动态添加菜单项(附源码+避坑)

分享一个口语中可以替代“deceive”的地道表达

使用TypeFace设置TextView的文字字体(附源码)

利用startActivityForResult返回数据到前一个Activity(附源码+解析)

“Old school”除了指“旧学校”,还有...

使用setContentView实现页面的转换效果

3个月让你告别哑巴英语!

为什么我们经常听到的是"Merry Christmas"而不是"Happy Christmas"?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Netkiller 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档