安卓项目:app注册/登录界面设计

目录

第一步:设计视图xml

第二步:编写登录和注册逻辑代码

运行效果展示:

总结:


提前展示项目结构:

第一步:设计视图xml

在layout目录下面创建activity_login.xml和activity_main.xml文件

activity_login.xml完整代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="16dp"tools:context=".MainActivity"><EditTextandroid:id="@+id/et_username"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="用户名" /><EditTextandroid:id="@+id/et_password"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="密码"android:inputType="textPassword" /><Buttonandroid:id="@+id/btn_login"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="登录" /><Buttonandroid:id="@+id/btn_register"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="注册" /></LinearLayout>

activity_main.xml完整代码

<?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">
<ListViewandroid:id="@+id/listview"android:layout_width="wrap_content"android:layout_height="match_parent"/>
</LinearLayout>

第二步:编写登录和注册逻辑代码

package com.example.damn;import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {private EditText etUsername;private EditText etPassword;private Button btnLogin;private Button btnRegister;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);etUsername = findViewById(R.id.et_username);etPassword = findViewById(R.id.et_password);btnLogin = findViewById(R.id.btn_login);btnRegister = findViewById(R.id.btn_register);btnLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 在这里处理登录逻辑String username = etUsername.getText().toString();String password = etPassword.getText().toString();if (username.isEmpty() || password.isEmpty()) {Toast.makeText(MainActivity.this, "用户名或密码不能为空", Toast.LENGTH_SHORT).show();} else {// 调用登录接口,验证用户名和密码是否正确}}});btnRegister.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 在这里处理注册逻辑String username = etUsername.getText().toString();String password = etPassword.getText().toString();if (username.isEmpty() || password.isEmpty()) {Toast.makeText(MainActivity.this, "用户名或密码不能为空", Toast.LENGTH_SHORT).show();} else {// 调用注册接口,将用户名和密码发送到服务器进行注册}}});}
}

第三步:编写AndroidManifest.xml

在main目录下改写AndroidManifest.xml,将主程序入口改成MainActivity

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><applicationandroid:allowBackup="true"android:dataExtractionRules="@xml/data_extraction_rules"android:fullBackupContent="@xml/backup_rules"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.Damn"tools:targetApi="31"><activityandroid:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

运行效果展示:

登录和注册可以与数据库连用

总结:

本文主要介绍了如何设计一个安卓应用的注册/登录界面。首先,我们创建了一个新的Android项目,并在项目中添加了一个名为activity_login.xml的布局文件,用于定义登录界面的布局。接着,我们在项目目录下创建了一个名为MainActivity.java的Java类,用于处理登录/注册逻辑。

在布局文件中,我们使用了LinearLayout作为根布局,并设置了垂直方向和内边距为16dp。该布局包含两个EditText控件,分别用于输入用户名和密码。第一个EditText控件的id为et_username,提示文本为“用户名”;第二个EditText控件的id为et_password,提示文本为“密码”,并且输入类型设置为textPassword,表示输入的内容将被隐藏。

此外,还包含两个Button控件,分别用于登录和注册操作。第一个Button控件的id为btn_login,显示文本为“登录”;第二个Button控件的id为btn_register,显示文本为“注册”。

在MainActivity.java中,我们首先通过findViewById()方法获取到各个控件的引用。然后,为登录和注册按钮分别设置了点击事件监听器。在点击事件的回调方法中,我们首先检查用户名和密码是否为空,如果为空则弹出提示信息;否则,调用相应的接口进行登录或注册操作。

最后,在AndroidManifest.xml文件中添加了MainActivity,并将其设置为应用的主入口。这样,我们就完成了一个简单的登录/注册界面的设计。

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

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

相关文章

数据库(一):基本语法一

数据库第二次作业 姓名&#xff1a;~~~&#xff0c;学号&#xff1a;~~~&#xff0c;专业&#xff1a;~~~ 2.66 书写SQL查询来获取以下结果: A.星期五的 ChangeClose。 SELECT ChangeClose FROM NDX WHERE TDayOfWeek Friday;B.星期五的最小、最大和平均 ChangeClose。 …

19.创建帖子

文章目录 一、建立路由二、开发CreatePostHandler三、编写logic四、编写dao层五、编译测试运行 一、建立路由 这里要稍微注意的是&#xff1a;需要登录后才可以发表帖子&#xff0c;所以需要用到我们之前写的鉴权中间件。中间件对用户携带的token解析成功后&#xff0c;便会将…

String、StringBuilder、StringBuffer 有什么区别?

1、典型回答 String、StringBuilder 和 StringBuffer 都是 Java 语言中&#xff0c;用于操作字符串的类&#xff0c;但它们在性能、可变性和线程安全性方面有一些区别 1、String&#xff1a;不可变字符串类&#xff0c;也就是说一旦创建&#xff0c;它的值就不可变。每次对 S…

Spring boot 集成netty实现websocket通信

一、netty介绍 Netty 是一个基于NIO的客户、服务器端的编程框架&#xff0c;使用Netty 可以确保你快速和简单的开发出一个网络应用&#xff0c;例如实现了某种协议的客户、服务端应用。Netty相当于简化和流线化了网络应用的编程开发过程&#xff0c;例如&#xff1a;基于TCP和U…

Loader、source

Loader 是在 QML 中用于动态加载和创建其他 QML 文件或组件的元素。它允许您根据需要在运行时加载和实例化其他的 QML 文件&#xff0c;以实现动态性和灵活性。 以下是一个简单的示例&#xff0c;展示了如何在 QML 中使用 Loader&#xff1a; Loader {sourceComponent: MyCom…

数码管的动态显示(二)

1.原理 这个十六进制是右边的dp为高位。 数码管的动态显示&#xff0c;在第一个计数周期显示个位&#xff0c;在第二个周期显示十位&#xff0c;在第三个周期显示百位由于人眼的视觉和数码管的特性&#xff0c;感觉就是显示了234&#xff0c;每个数码管的显示需要从输入的数据里…

Go语言必知必会100问题-23 判断空切片最佳方法

前言 在Go语言必知必会100问题-22 空切片与nil切片有区别吗&#xff1f;中分析了空切片和nil切片是有区别的&#xff0c;那如何正确的判断一个切片是否为空切片呢&#xff1f; 案例引入 下面通过一个具体的例子进行说明&#xff0c;getOperations 函数返回一个float32类型的…

Flutter第四弹:Flutter图形渲染性能

目标&#xff1a; 1&#xff09;Flutter图形渲染性能能够媲美原生&#xff1f; 2&#xff09;Flutter性能优于React Native? 一、Flutter图形渲染原理 1.1 Flutter图形渲染原理 Flutter直接调用Skia。 Flutter不使用WebView&#xff0c;也不使用操作系统的原生控件,而是…

Java学习笔记14——常量与变量

曾和儿子分享过所谓计算机程序&#xff0c;都是编写代码进行“数据处理和处理数据”而已。任何编程语言编写何种应用&#xff0c;数据都必须以某种方式表示。掌握变量和常量的用法&#xff0c;可以使代码的可维护性、可读性大大提高。 一、常量 常量就是在程序中固定不变的量…

C语言scandir函数获取文件夹内容

scandir 函数用于列举指定目录下的文件列表&#xff0c;并将结果存储在一个动态分配的数组中。 函数原型&#xff1a; int scandir(const char *dirpath, struct dirent ***namelist,int (*filter)(const struct dirent *),int (*compar)(const struct dirent **, const stru…

labview中6种机械动作的区别

1.单击时转换&#xff1a;单击时转换&#xff0c;需要手动转换或者赋值回复原来状态&#xff1b; 2.释放时转换&#xff1a;释放时时转换&#xff0c;需要手动转换或者赋值回复原来状态&#xff1b; 3.单击时转换保持到鼠标释放&#xff1a;触发两次&#xff0c;自动恢复原来状…

Python互斥锁实例(包含超时解锁)

Python互斥锁实例&#xff08;包含超时解锁&#xff09; 文章目录 前言正文1 锁被占用直接返回2 拿不到锁则一直等待3 拿不到锁等待直到超时 总结 前言 最近遇到一个小需求&#xff0c;大概是请求机器人&自动化设备执行某些功能&#xff0c;这些功能之间有共同操作资源或在…

Linux:导出环境变量命令export

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 Linux中的内建命令export命令用于创建一个环境变量&#xff0c;或将一个普通变量导出为环境变量&#xff0c;并且在这个过程中&#xff0c;可以给该环境变量赋值。 下面…

多数问题求解之蒙特卡洛与分治法

多数问题&#xff08;Majority Problem&#xff09;是一个有多种求解方法的经典问题&#xff0c;其问题定义如下&#xff1a; 给定一个大小为 n n n的数组&#xff0c;找出其中出现次数超过 n / 2 n/2 n/2的元素 例如&#xff1a;当输入数组为 [ 5 , 3 , 5 , 2 , 3 , 5 , 5 ] […

【WPS】压缩图片

第一步&#xff1a; 点击插入&#xff0c;点击图片 第二步&#xff1a; 点击图片工具&#xff0c;点击压缩图片 第三步&#xff1a;

Vue3 前端生成随机id( 生成 UUID )

效果展示 封装工具&#xff08;代码展示&#xff09; 重新创建一个文件**/utils/someTools.js**&#xff0c;并在里面写入如下代码。 function Tools() {}Tools.prototype.guid function () {return xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx.replace(/[xy]/g, function (c) {v…

jQuery模态框弹窗提示代码

jQuery模态框弹窗提示代码 下载地址 jQuery模态框弹窗提示代码

GPT每日面试题—Vue中style的scoped是如何实现样式隔离的

充分利用ChatGPT的优势&#xff0c;帮助我们快速准备前端面试。今日问题&#xff1a;Vue中style的scoped是如何实现样式隔离的。 Q&#xff1a;在前端面试中&#xff0c;如果被问到&#xff0c;vue文件中的scoped是如何实现样式格式的&#xff0c;什么回答比较好&#xff0c;全…

Requests教程-17-请求代理设置

上一小节我们学习了requests解决乱码的方法&#xff0c;本小节我们讲解一下requests设置代理的方法。 代理基本原理 代理实际上指的就是代理服务器&#xff0c; 英文叫作proxy server &#xff0c;它的功能是代理网络用户去取得网络信息。形象地说&#xff0c;它是网络信息的中…

【阿里云系列】-基于云效构建部署Springboot项目到ACK

介绍 为了提高项目迭代的速度加速交付产品给客户&#xff0c;我们通常会选择CICD工具来减少人力投入产生的成本&#xff0c;开源的工具比如有成熟的Jenkins&#xff0c;但是本文讲的是阿里云提高的解决方案云效平台&#xff0c;通过配置流水线的形式实现项目的快速部署到服务器…