Android实现显示和隐藏密码功能的示例代码

作者:不良使 时间:2022-12-14 23:40:09 

在前端中我们知道用javascript就可以可以很容易实现,那么在Android中怎么实现这个功能呢?

Java代码

package com.example.test2;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

private EditText password;
   private ImageView imageView;
   private boolean flag=true;
   private HideReturnsTransformationMethod method_show;

@Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);

password = findViewById(R.id.password);
       imageView = findViewById(R.id.img);
       imageView.setOnClickListener(this);

}

@Override
   public void onClick(View v) {
       switch (v.getId()){
           case R.id.img:
               changeImage();

}
   }

private void changeImage() {
       // todo 每次进入登陆时输入的密码都是隐藏的
       PasswordTransformationMethod methodHide=PasswordTransformationMethod.getInstance();
       password.setTransformationMethod(methodHide);

if(flag){
           imageView.setImageDrawable(this.getResources().getDrawable(R.drawable.eye1));
           flag=false;
           // todo 隐藏密码
           PasswordTransformationMethod method_hide = PasswordTransformationMethod.getInstance();
           password.setTransformationMethod(method_hide);
       }
       else{
           imageView.setImageDrawable(this.getResources().getDrawable(R.drawable.eye2));
           flag=true;
           // todo  显示密码
           method_show= HideReturnsTransformationMethod.getInstance();
           password.setTransformationMethod(method_show);

}

if (!password.getText().toString().trim().equals("")) {
           password.setSelection(password.getText().toString().trim().length());//将光标移至文字末尾
       }

}
}

布局代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_height="match_parent"
   android:layout_width="match_parent"
   xmlns:android="http://schemas.android.com/apk/res/android">
   <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="50dp"
       android:background="@color/white"
       android:orientation="horizontal" >
       <EditText
           android:id="@+id/password"
           android:layout_width="0dp"
           android:layout_weight="1"
           android:layout_height="match_parent"
           android:layout_gravity="center_vertical"
           android:layout_marginLeft="10dp"
           android:inputType="textPassword"
           android:hint="请设置登录密码"
           android:background="@null"/>

<button
           android:id="@+id/btn"
           android:layout_width="89dp"
           android:layout_height="match_parent"
           android:background="@drawable/eye2"/>

</LinearLayout>

</LinearLayout>

睁眼闭眼资源

Android实现显示和隐藏密码功能的示例代码

Android实现显示和隐藏密码功能的示例代码

Activity 类是 Android 应用的关键组件,而 Activity 的启动和组合方式则是该平台应用模型的基本组成部分。在编程范式中,应用是通过 main() 方法启动的,而 Android 系统与此不同,它会调用与其生命周期特定阶段相对应的特定回调方法来启动 Activity 实例中的代码。

本文介绍了 Activity 的概念,并提供了有关如何使用 Activity 的简要说明。

Activity 的概念

移动应用体验与桌面体验的不同之处在于,用户与应用的互动并不总是在同一位置开始,而是经常以不确定的方式开始。例如,如果您从主屏幕打开电子邮件应用,可能会看到电子邮件列表,如果您通过社交媒体应用启动电子邮件应用,则可能会直接进入电子邮件应用的邮件撰写界面。

Activity 类的目的就是促进这种范式的实现。当一个应用调用另一个应用时,调用方应用会调用另一个应用中的 Activity,而不是整个应用。通过这种方式,Activity 充当了应用与用户互动的入口点。您可以将 Activity 实现为 Activity 类的子类。

Activity 提供窗口供应用在其中绘制界面。此窗口通常会填满屏幕,但也可能比屏幕小,并浮动在其他窗口上面。通常,一个 Activity 实现应用中的一个屏幕。例如,应用中的一个 Activity 实现&ldquo;偏好设置&rdquo;屏幕,而另一个 Activity 实现&ldquo;选择照片&rdquo;屏幕。

大多数应用包含多个屏幕,这意味着它们包含多个 Activity。通常,应用中的一个 Activity 会被指定为主 Activity,这是用户启动应用时出现的第一个屏幕。然后,每个 Activity 可以启动另一个 Activity,以执行不同的操作。例如,一个简单的电子邮件应用中的主 Activity 可能会提供显示电子邮件收件箱的屏幕。主 Activity 可能会从该屏幕启动其他 Activity,以提供执行写邮件和打开邮件这类任务的屏幕。

虽然应用中的各个 Activity 协同工作形成统一的用户体验,但每个 Activity 与其他 Activity 之间只存在松散的关联,应用内不同 Activity 之间的依赖关系通常很小。事实上,Activity 经常会启动属于其他应用的 Activity。例如,浏览器应用可能会启动社交媒体应用的&ldquo;分享&rdquo;Activity。

要在应用中使用 Activity,您必须在应用的清单中注册关于 Activity 的信息,并且必须适当地管理 Activity 的生命周期。本文的后续内容将介绍这些主题。

配置清单

要使应用能够使用 Activity,您必须在清单中声明 Activity 及其特定属性。

声明 Activity

要声明 Activity,请打开清单文件,并添加 元素作为 元素的子元素。例如:

<manifest ... >
 <application ... >
     <activity android:name=".ExampleActivity" />
     ...
 </application ... >
 ...
</manifest >

此元素唯一的必要属性是 android:name,该属性用于指定 Activity 的类名称。您也可以添加用于定义标签、图标或界面主题等 Activity 特征的属性。如需详细了解上述及其他属性,请参阅 元素参考文档。

注意:发布应用后,就不应再更改 Activity 名称,否则可能会破坏某些功能,例如应用快捷方式。

声明 intent 过滤器

Intent 过滤器是 Android 平台的一项非常强大的功能。借助这项功能,您不但可以根据显式请求启动 Activity,还可以根据隐式请求启动 Activity。例如,显式请求可能会告诉系统&ldquo;在 Gmail 应用中启动&lsquo;发送电子邮件&rsquo;Activity&rdquo;,而隐式请求可能会告诉系统&ldquo;在任何能够完成此工作的 Activity 中启动&lsquo;发送电子邮件&rsquo;屏幕&rdquo;。当系统界面询问用户使用哪个应用来执行任务时,这就是 intent 过滤器在起作用。

要使用此功能,您需要在 元素中声明 属性。此元素的定义包括 元素,以及可选的 元素和/或 元素。这些元素组合在一起,可以指定 Activity 能够响应的 intent 类型。例如,以下代码段展示了如何配置一个发送文本数据并接收其他 Activity 的文本数据发送请求的 Activity:

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
   <intent-filter>
       <action android:name="android.intent.action.SEND" />
       <category android:name="android.intent.category.DEFAULT" />
       <data android:mimeType="text/plain" />
   </intent-filter>
</activity>

管理 Activity 生命周期 一个 Activity 在其生命周期中会经历多种状态。您可以使用一系列回调来处理状态之间的转换。下面几节将介绍这些回调。

onCreate()

您必须实现此回调,它会在系统创建您的 Activity 时触发。您的实现应该初始化 Activity 的基本组件:例如,您的应用应该在此处创建视图并将数据绑定到列表。最重要的是,您必须在此处调用 setContentView() 来定义 Activity 界面的布局。

onCreate() 完成后,下一个回调将是 onStart()。

onStart()

onCreate() 退出后,Activity 将进入&ldquo;已启动&rdquo;状态,并对用户可见。此回调包含 Activity 进入前台与用户进行互动之前的最后准备工作。

onResume()

系统会在 Activity 开始与用户互动之前调用此回调。此时,该 Activity 位于 Activity 堆栈的顶部,并会捕获所有用户输入。应用的大部分核心功能都是在 onResume() 方法中实现的。

onResume() 回调后面总是跟着 onPause() 回调。

onPause()

当 Activity 失去焦点并进入&ldquo;已暂停&rdquo;状态时,系统就会调用 onPause()。例如,当用户点按&ldquo;返回&rdquo;或&ldquo;最近使用的应用&rdquo;按钮时,就会出现此状态。当系统为您的 Activity 调用 onPause() 时,从技术上来说,这意味着您的 Activity 仍然部分可见,但大多数情况下,这表明用户正在离开该 Activity,该 Activity 很快将进入&ldquo;已停止&rdquo;或&ldquo;已恢复&rdquo;状态。

如果用户希望界面继续更新,则处于&ldquo;已暂停&rdquo;状态的 Activity 也可以继续更新界面。例如,显示导航地图屏幕或播放媒体播放器的 Activity 就属于此类 Activity。即使此类 Activity 失去了焦点,用户仍希望其界面继续更新。

您不应使用 onPause() 来保存应用或用户数据、进行网络呼叫或执行数据库事务。有关保存数据的信息,请参阅保存和恢复 Activity 状态。

onPause() 执行完毕后,下一个回调为 onStop()或 onResume(),具体取决于 Activity 进入&ldquo;已暂停&rdquo;状态后发生的情况。

onStop()

当 Activity 对用户不再可见时,系统会调用 onStop()。出现这种情况的原因可能是 Activity 被销毁,新的 Activity 启动,或者现有的 Activity 正在进入&ldquo;已恢复&rdquo;状态并覆盖了已停止的 Activity。在所有这些情况下,停止的 Activity 都将完全不再可见。

系统调用的下一个回调将是 onRestart()(如果 Activity 重新与用户互动)或者 onDestroy()(如果 Activity 彻底终止)。

onRestart()

当处于&ldquo;已停止&rdquo;状态的 Activity 即将重启时,系统就会调用此回调。onRestart() 会从 Activity 停止时的状态恢复 Activity。
此回调后面总是跟着 onStart()。

onDestroy()

系统会在销毁 Activity 之前调用此回调。

此回调是 Activity 接收的最后一个回调。通常,实现 onDestroy() 是为了确保在销毁 Activity 或包含该 Activity 的进程时释放该 Activity 的所有资源。

来源:https://blog.csdn.net/qq_46906413/article/details/125379236

标签:Android,显示,隐藏,密码
0
投稿

猜你喜欢

  • Java 使用多线程调用类的静态方法的示例

    2021-10-31 21:29:20
  • c#设计模式之单例模式的实现方式

    2021-12-30 19:46:33
  • c# 对cookies(增、删、改、查)的操作方法

    2023-08-10 06:24:48
  • Java数组高级算法与Arrays类常见操作小结【排序、查找】

    2022-12-02 15:17:14
  • 详解IntelliJ IDEA创建spark项目的两种方式

    2023-12-05 05:48:21
  • 安卓(Android)动态创建多个按钮并添加监听事件

    2023-04-25 16:11:43
  • 关于线程池你不得不知道的一些设置

    2021-06-08 11:34:45
  • 构建多模块的Spring Boot项目步骤全纪录

    2022-02-20 04:28:44
  • C#生成带logo的二维码

    2021-11-03 17:38:41
  • 详解Android中Notification的使用方法

    2023-02-07 13:17:39
  • Java Servlet实现表白墙的代码实例

    2021-08-18 16:57:11
  • java实现递归文件列表的方法

    2022-10-13 13:17:00
  • Spring Boot缓存实战 EhCache示例

    2023-08-30 12:23:35
  • WPF换肤设计原理浅析

    2022-11-18 00:37:00
  • Eclipse运行android项目报错Unable to build: the file dx.jar was not loaded from the SDK folder的解决办法

    2023-06-14 15:28:30
  • 详细分析Java Lambda表达式

    2021-06-20 04:32:19
  • Aspectj框架实战案例详解

    2022-12-30 02:28:24
  • Compose状态保存rememberSaveable原理解析

    2021-12-26 10:07:56
  • 深入讲解SPI 在 Spring 中的应用

    2022-10-21 03:44:55
  • Mybatis-Plus分页的使用与注意事项

    2022-08-14 22:00:56
  • asp之家 软件编程 m.aspxhome.com