Android实现密码的隐藏和显示

Android实现密码的隐藏和显示

先贴效果

在这里插入图片描述

小眼睛UI

在这里插入图片描述
在这里插入图片描述

代码实现

.xml

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="20dp"
            android:gravity="center_vertical">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/password"
                android:textColor="#000000"
                android:textSize="24sp" />

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">
                <EditText
                    android:id="@+id/et_password"
                    android:layout_width="match_parent"
                    android:hint="@string/input_password"
                    android:layout_gravity="center_vertical"
                    style="@style/MyEditStyle"
                    android:layout_marginLeft="10dp"
                    android:inputType="textPassword"/>
                <ImageView
                    android:id="@+id/iv_show_password"
                    android:layout_width="20dp"
                    android:layout_height="20dp"
                    android:visibility="gone"
                    android:layout_gravity="center|right"
                    android:layout_marginRight="10dp"
                    android:background="@drawable/hide_password"/>
            </FrameLayout>

        </LinearLayout>

.java

		private boolean isHidePassword = false;//是否隐藏密码
		private EditText etPassword;//密码输入框
		private ImageView ivShowPassword;//小眼睛控件

		//监听文本框变化
		etPassword.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                if (s.length() > 0) {
                    ivShowPassword.setVisibility(View.VISIBLE);//显示小眼睛控件
                } else {
                    isHidePassword = false;
                    ivShowPassword.setVisibility(View.GONE);//隐藏小眼睛控件
                    // 隐藏显示密码方法(下面有详解)
                    UiUtils.setHidePassword(mActivity, etPassword, ivShowPassword, true);
                }
            }
        });

		//监听小眼睛点击事件
		ivShowPassword.setOnClickListener(v -> {
			//判断当前是隐藏密码or显示密码
            if (isHidePassword) {
                isHidePassword = false;
                // 改变UI
                UiUtils.setHidePassword(mActivity, etPassword, ivShowPassword, true);
            } else {
                isHidePassword = true;
                UiUtils.setHidePassword(mActivity, etPassword, ivShowPassword, false);
            }
            //设置光标位置在文本框末尾
            etPassword.setSelection(etPassword.getText().toString().length());
        });

UiUtils

package com.sjm.ihelp.Utils;

import android.app.Activity;
import android.graphics.Color;
import android.graphics.Typeface;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.gjc.ihelp.R;

public class UiUtils {

    /**
     * 隐藏密码
     *
     * @param activity
     * @param et:输入框控件
     * @param iv:小眼睛控件
     * @param boo:是否隐藏
     */
    public static void setHidePassword(Activity activity, EditText et, ImageView iv, boolean boo) {
        if (activity != null) {
            activity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    if (et != null && iv != null) {
                        if (boo) {
                            //隐藏输入框内容
                            et.setTransformationMethod(PasswordTransformationMethod.getInstance());
                            //改变小眼睛控件UI
                            iv.setBackgroundResource(R.drawable.hide_password);
                        } else {
                            //显示输入框内容
                            et.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                            iv.setBackgroundResource(R.drawable.show_password);
                        }
                    }
                }
            });
        }
    }

}
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是阿超

现在二师兄的肉比师父的都贵了.

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值