android 登录界面编写

1、登录页面实现内容

1.实现使用两个EditText输入框输入用户名和密码。

2.使用CheckBox控件记住密码功能。

3.登录时候,验证用户名和密码是否为空。

4.当前CheckBox控件记住密码勾上时,使用SharedPreferences存储用户名和密码。

5.登录时候使用ProgressDialog登录转圈圈2秒,两秒后显示登录成功。

6.默认用户名和密码admin和admin。当用户名和密码输入都是admin就提示登录成功。

2、登录页面布局实现
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/tvTitle"style="@style/TextView"android:layout_width="match_parent"android:layout_height="80dp"android:layout_marginTop="20dp"android:gravity="center"android:text="登录"android:textSize="24sp"android:textStyle="bold"app:layout_constraintTop_toTopOf="parent" /><LinearLayoutandroid:id="@+id/layoutInput"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="30dp"android:gravity="center"android:orientation="vertical"app:layout_constraintTop_toBottomOf="@id/tvTitle"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"><TextViewstyle="@style/TextView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/layout_left_distance"android:text="用户名:" /><EditTextandroid:id="@+id/editUser"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginRight="@dimen/layout_right_diatance"android:ems="10" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"><TextViewstyle="@style/TextView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/layout_left_distance"android:text="密   码:" /><EditTextandroid:id="@+id/editPsw"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginRight="@dimen/layout_right_diatance"android:ems="10"android:inputType="textPassword" /></LinearLayout></LinearLayout><LinearLayoutandroid:id="@+id/layoutCheck"android:layout_width="match_parent"android:layout_height="wrap_content"app:layout_constraintTop_toBottomOf="@id/layoutInput"android:gravity="center"><CheckBoxandroid:id="@+id/checkBoxRemember"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="80dp"android:text="记住密码" /></LinearLayout><Buttonandroid:id="@+id/buttonLogin"style="@style/button"android:layout_width="match_parent"android:layout_height="50dp"android:layout_marginLeft="50dp"android:layout_marginTop="20dp"android:layout_marginRight="50dp"android:text="登录"app:layout_constraintTop_toBottomOf="@id/layoutCheck"tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
3、fragment实现登录界面
public class LoginFragment extends Fragment {private ProgressDialog progressDialog = null;private View rootView;private EditText editUser, editPsw;private CheckBox checkBoxRemember;public LoginFragment() {}@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {rootView = inflater.inflate(R.layout.fragment_loglin, container, false);editUser = rootView.findViewById(R.id.editUser);editPsw = rootView.findViewById(R.id.editPsw);checkBoxRemember = rootView.findViewById(R.id.checkBoxRemember);SharedPreferences sp = getActivity().getSharedPreferences("mmsx", MODE_PRIVATE);editUser.setText(sp.getString("user",""));editPsw.setText(sp.getString("password",""));checkBoxRemember.setChecked(sp.getBoolean("remember",true));View buttonLogin =  rootView.findViewById(R.id.buttonLogin);buttonLogin.setOnClickListener(view -> {String user = editUser.getText().toString();String psw = editPsw.getText().toString();if (user.isEmpty()){Toast.makeText(getActivity(),"请输入用户名", Toast.LENGTH_LONG).show();return;}if (psw.isEmpty()){Toast.makeText(getActivity(),"请输入密码", Toast.LENGTH_LONG).show();return;}if (user.equalsIgnoreCase("admin") && psw.equalsIgnoreCase("admin")){SharedPreferences.Editor edit = Objects.requireNonNull(getActivity()).getSharedPreferences("mmsx", MODE_PRIVATE).edit();if (checkBoxRemember.isChecked()){edit.putString("user", "admin");edit.putString("password", "admin");}else {edit.putString("user", "");edit.putString("password", "");}edit.putBoolean("remember", checkBoxRemember.isChecked());edit.apply();progressDialog=new ProgressDialog(getActivity());progressDialog.setTitle("登录中");progressDialog.setMessage("登录中,请稍后...");progressDialog.setCancelable(true);progressDialog.show();//这里的话新建一个线程,重写run()方法,new Thread(){public void run(){SystemClock.sleep(2000);//把信息码发送给handle让更新界面handler.sendEmptyMessage(123);}}.start();}else {Toast.makeText(getActivity(),"用户名或者密码错误", Toast.LENGTH_LONG).show();}});return rootView;}@SuppressLint("HandlerLeak")Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {if (msg.what == 123) {progressDialog.dismiss();Toast.makeText(getActivity(),"登录成功", Toast.LENGTH_LONG).show();}}};
}
4、实现成果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/890179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LDP+LBP代码解析及应用场景分析

代码整体结构与功能概述 这段 C 代码主要实现了两个图像特征提取算法&#xff0c;分别是局部方向模式&#xff08;Local Directional Pattern&#xff0c;LDP&#xff09;和多分块局部二值模式&#xff08;Multi-Block Local Binary Pattern&#xff0c;Multi-Block LBP&#…

Nuxt样式文件导入

1.在Nuxt导入样式文件的方式 在nuxt中&#xff0c;支持两种样式文件导入的配置。如下&#xff1a; 通过配置文件的css属性指定文件路径。该属性可以支持一个字符串数组&#xff0c;每一项为一个样式文件路径。例如&#xff1a; export default defineNuxtConfig({compatibili…

单元测试使用记录

什么是单元测试 简单来说就是对一个类中的方法进行测试&#xff0c;对输出的结果检查判断是否符合预期结果 但是在多年的工作中&#xff0c;从来没有哪个项目中真正系统的用到了单元测试&#xff0c;因此对它还是很陌生的&#xff0c;也就造成更加不会在项目中区使用它。 如何…

将4G太阳能无线监控的视频接入电子监控大屏,要考虑哪些方面?

随着科技的飞速发展&#xff0c;4G太阳能无线监控系统以其独特的优势在远程监控领域脱颖而出。这种系统结合了太阳能供电的环保特性和4G无线传输的便捷性&#xff0c;为各种环境尤其是无电或电网不稳定的地区提供了一种高效、可靠的视频监控解决方案。将这些视频流接入大屏显示…

Linux C 程序 【05】异步写文件

1.开发背景 Linux 系统提供了各种外设的控制方式&#xff0c;其中包括文件的读写&#xff0c;存储文件的介质可以是 SSD 固态硬盘或者是 EMMC 等。 其中常用的写文件方式是同步写操作&#xff0c;但是如果是写大文件会对 CPU 造成比较大的负荷&#xff0c;采用异步写的方式比较…

曲线的测地曲率

测地曲率 设 S : r ( u , v ) S:r(u,v) S:r(u,v)是曲面&#xff0c; γ ( s ) r ( u ( s ) , v ( s ) ) \gamma(s)r(u(s),v(s)) γ(s)r(u(s),v(s))是 S S S上的一条弧长参数化曲线。 1.称 K g ( s ) D γ ˙ d s ( γ ( s ) ) T \mathbb{K}_g(s)\frac{D\dot{\gamma}}{d\b…

js常用方法之: 预览大图(uniapp原生方法封装)

方法: //预览图片 pic可传单个图片地址字符串 或 图片数组(带index) previewPic: function(pic, index) {if (!pic) return;if (index undefined) {let array [];array.push(pic);uni.previewImage({urls: array,current: array[0]});} else {uni.previewImage({urls: pic,…

重拾设计模式--原型模式

文章目录 原型模式定义原型模式UML图优点缺点使用场景C 代码示例深拷贝、浅拷贝 原型模式定义 用原型实例指定创建对象的种类&#xff0c;并且通过拷贝这些原型创建新的对象&#xff1b; 核心中的核心就是 克隆clone ,后面讲 原型模式是一种创建型设计模式&#xff0c;它的主要…

flutter --no-color pub get 超时解决方法

新建Flutter项目后&#xff0c;运行报错&#xff0c;需要执行pub get 点击Run ‘flutter pub get’ … … … 卡着&#xff0c;不动了&#xff0c;提示超时 是因为墙的问题 解决方案&#xff1a; 添加以下环境变量 变量名: PUB_HOSTED_URL 变量值: https://pub.flutter-io.cn …

如何详细步骤地进行Z-Blog博客系统的安装过程?

安装Z-Blog博客系统的步骤如下&#xff1a; 下载Z-Blog软件包&#xff1a;根据你的操作系统&#xff0c;选择相应的Z-Blog软件包进行下载。在Z-Blog官方网站上&#xff0c;你可以找到最新版本的Z-Blog软件包。 解压软件包&#xff1a;将下载的Z-Blog软件包解压到你的服务器或本…

【C++】优先级队列以及仿函数

本篇我们来介绍一下优先级队列 priority_queue 。优先级队列的底层是数据结构中的堆&#xff0c;在C中它是一个容器适配器&#xff0c;这个容器适配器比之前的栈和队列更复杂。 1.priority_queue的介绍 1.1 优先级队列的底层 因为优先级队列就是堆&#xff0c;堆的底层是数组…

CompletableFuture小记

文章目录 概述Thread 和 RunnableThreadRunnableThread 和 Runnable 的关系小问题 Callable、Future 和 FutureTaskCallableFutureTaskFuture接口Callable 和 FutureTask 的关系Thread 、Runnable、FutureTask 和 Callable 的关系 CompletableFuture常用方法概述get() 和 join(…

不需要服务器,使用netlify快速部署自己的网站

Netlify简介 1.1 Netlify的功能与特点 Netlify 是一个功能强大的静态网站托管平台&#xff0c;它不仅提供了简单的网站部署功能&#xff0c;还集成了许多现代化的开发工具和服务&#xff0c;帮助开发者更高效地构建、部署和管理网站。Netlify 的核心功能包括&#xff1a; 自动…

sudo apt-get update 报错及解决

sudo apt-get update报错及解决工作笔记 一、问题现象 在执行 sudo apt-get update 命令时&#xff0c;终端出现一系列报错信息&#xff1a; 从 http://archive.ubuntu.com/ubuntu 相关多个仓库&#xff08;如 xenial InRelease、xenial-security InRelease、xenial-updates…

简单工厂模式和策略模式的异同

文章目录 简单工厂模式和策略模式的异同相同点&#xff1a;不同点&#xff1a;目的&#xff1a;结构&#xff1a; C 代码示例简单工厂模式示例&#xff08;以创建图形对象为例&#xff09;策略模式示例&#xff08;以计算价格折扣策略为例&#xff09;UML区别 简单工厂模式和策…

leetcode 3285 找到稳定山的下标

3285. 找到稳定山的下标 已解答 简单 相关标签 相关企业 有 n 座山排成一列&#xff0c;每座山都有一个高度。给你一个整数数组 height &#xff0c;其中 height[i] 表示第 i 座山的高度&#xff0c;再给你一个整数 threshold 。 对于下标不为 0 的一座山&#xff0c;如果…

Unity动态读取外部图片转Texture2D,内存过大问题解决方案

问题描述 加载原始图片2.63M的图片,分辨率为3023*4032,占用内存108.5M 加载原始图片12.6 M的图片,分辨率为6000*8000,占用内存427.2M 太恐怖了吧 解决方案 1.加载完图片,等比缩放,宽高改为1024或者512以下 1024占用5.2M,512占用1.3M,相比小了很多 2.原始Texture2…

linux-----进程及基本操作

进程的基本概念 定义&#xff1a;在Linux系统中&#xff0c;进程是正在执行的一个程序实例&#xff0c;它是资源分配和调度的基本单位。每个进程都有自己独立的地址空间、数据段、代码段、栈以及一组系统资源&#xff08;如文件描述符、内存等&#xff09;。进程的组成部分&am…

ArkTs组件的学习

一. AlphabetIndexer 可以与容器组件联动用于按逻辑结构快速定位容器显示区域的组件 参数名类型必填说明arrayValueArray<string>是字母索引字符串数组&#xff0c;不可设置为空selectednumber是初始选中项索引值若超出索引值范围则取默认值0 class Lxr{tImg:Resource…

cusolver SP 与 cuSPARSE 函数库的关系

NVIDIA 提供的 cuSPARSE 和 cuSOLVER 函数库都是用于处理稀疏矩阵的高性能计算库&#xff0c;但它们的功能和用途有所不同。以下是这两个库的关系和各自的功能概述&#xff1a; 1. cuSPARSE 函数库 定义&#xff1a;cuSPARSE 是 NVIDIA 的一个库&#xff0c;专门用于稀疏矩阵的…