Android Studio制作简单登录界面

Android Studio制作简单登录界面

实现目标

应用线性布局设计登录界面,要求点击输入学号时弹出数字键盘界面,点击输入密码时弹出字母键盘,出现的文字、数字、尺寸等全部在values文件夹下相应.xml文件中设置好,使用时直接引用。当用户名或密码为空,显示一个提示信息“用户名与密码不能为空!”,当用户名和密码匹配,显示“登录成功”。

整体效果图如下:

实现过程

新建项目

新建一个项目如图所示:

UI设计

1.新建login.xml,选择线性布局

步骤如下:

设计登录页面

LinearLayout是线性布局,布局中的组件按照垂直或者水平方向进行排列

gravity:设置自身内部元素的对齐方式layout_gravity:用来控制该控件在包含该控件的父控件中的位置

本设计采用垂直线性布局,如图所示:

控件类型: EditText 是一个允许用户输入和编辑文本的控件。

android:id: 这个属性为控件设置了一个唯一的ID(@+id/ed2),使得开发者可以在Java或Kotlin代码中通过这个ID来引用这个控件。

android:layout_width 和 android:layout_height: 这些属性定义了控件的宽度和高度。531dp 指定了宽度为531设备独立像素,wrap_content 表示高度会根据内容的大小自动调整。

实现代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/login"android:layout_width="match_parent"android:layout_height="match_parent"android:padding="25dp"android:background="@color/white"tools:context="com.example.myapplication1.LoginActivity"android:orientation="vertical"android:weightSum="1"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/login_page_title"android:textSize="@dimen/text_size_large"android:textColor="@android:color/black"android:layout_gravity="center_horizontal"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:gravity="center"android:layout_weight="0.55"><LinearLayoutandroid:layout_width="300dp"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:layout_width="@dimen/label_width"android:layout_height="wrap_content"android:text="@string/student_id_label"android:textSize="@dimen/text_size_medium"android:textColor="@android:color/black"/>
​<EditTextandroid:id="@+id/ed1"android:layout_width="531dp"android:layout_height="wrap_content"android:minHeight="48dp"android:padding="12dp"android:hint="@string/student_id_hint"android:inputType="number"android:textColor="@color/black"android:textColorHint="@android:color/darker_gray"android:visibility="visible" /></LinearLayout><LinearLayoutandroid:layout_width="300dp"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:layout_width="@dimen/label_width"android:layout_height="wrap_content"android:text="@string/password_label"android:textSize="@dimen/text_size_medium"android:textColor="@android:color/black"/><EditTextandroid:id="@+id/ed2"android:layout_width="531dp"android:layout_height="wrap_content"android:minHeight="48dp"android:padding="12dp"android:hint="@string/password_hint"android:inputType="text"android:textColor="@color/black"android:textColorHint="@android:color/darker_gray"android:visibility="visible" /></LinearLayout></LinearLayout>
​<Buttonandroid:layout_width="@dimen/login_button_width"android:layout_height="wrap_content"android:text="@string/login_button_text"android:textSize="@dimen/text_size_button"android:id="@+id/bt"android:layout_gravity="center_horizontal" /></LinearLayout>

2.将文本、数字和尺寸等资源从布局文件中移动到values文件夹下的相应.xml文件中并引用,需要按照以下步骤操作:

文本(字符串)资源:在values文件夹下的strings.xml文件中定义。

尺寸资源:在values文件夹下的dimens.xml文件中定义。

颜色资源:已经在colors.xml中定义,可以继续添加新的颜色或使用已有的颜色。

具体代码如下:

strings.xml

<resources><string name="login_page_title">登录页面</string><string name="student_id_hint">请输入学号</string><string name="password_hint">请输入密码</string><string name="student_id_label">学号:</string><string name="password_label">密码:</string><string name="login_button_text">登录</string>
</resources>

dimens.xml

<resources><dimen name="text_size_large">30dp</dimen><dimen name="text_size_medium">18dp</dimen><dimen name="login_button_width">285dp</dimen><dimen name="login_input_width">300dp</dimen><dimen name="label_width">65dp</dimen><dimen name="text_size_button">20dp</dimen>
</resources>

调用

1.新建一个LoginActivity进行调用,如图所示:

定义一个登录界面的行为:包含两个文本输入框(EditText)用于输入用户名和密码,以及一个按钮(Button)用于提交登录信息。

成员变量:

  • usertext 和 passtext 是EditText类型的变量,分别用于获取用户输入的用户名和密码。

onCreate方法:

  • 在onCreate方法中,首先调用super.onCreate(savedInstanceState)setContentView(R.layout.login)来初始化界面。

ButtonListener 类:

  • ButtonListener实现了View.OnClickListener接口,用于处理按钮点击事件。

  • 在其onClick方法中,首先获取usertext和passtext中的文本内容。

  • 然后,通过一系列的条件判断,检查用户名和密码是否为空,是否匹配预设的正确用户名("2021")和密码("abc")。

  • 如果用户名或密码为空,显示一个提示信息“用户名与密码不能为空!”。

  • 如果用户名和密码匹配,显示“登录成功”。

具体实现代码如下:

package com.example.myapplication1;
​
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.view.View;
​
import androidx.appcompat.app.AppCompatActivity;
​
public class LoginActivity extends AppCompatActivity {private EditText usertext;private EditText passtext;private Button loginbutton;
​@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.login);usertext=(EditText)this.findViewById(R.id.ed1);passtext=(EditText)this.findViewById(R.id.ed2);loginbutton=(Button)this.findViewById(R.id.bt);loginbutton.setOnClickListener(new ButtonListener());}private class ButtonListener implements View.OnClickListener{@Overridepublic void onClick(View v){String user=usertext.getText().toString();String pass=passtext.getText().toString();if (user.equals("")||pass.equals("")){Toast.makeText(LoginActivity.this,"用户名与密码不能为空!",Toast.LENGTH_SHORT).show();}else if (user.equals("2021")&&pass.equals("abc")){Toast.makeText(LoginActivity.this,"登陆成功",Toast.LENGTH_SHORT).show();}else{Toast.makeText(LoginActivity.this,"用户名或密码输入有误,请更正后重新输入!",Toast.LENGTH_SHORT).show();}}}}

配置文件

AndroidManifest.xml是整个Android应用程序的全局面描述配置文件

清单文件中通常包含以下六项信息:

  • 声明应用程序的包名: 用来识别应用程序的唯一标志

  • 描述应用程序组件<activity>

  • 确定宿主应用组件进程

  • 声明应用程序拥有的权限<uses-permission>

  • 定义应用程序所支持API的最低等级

  • 列举应用程序必须链接的库

添加LoginActivity到 AndroidManifest.xml中

具体代码如下:

<?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.AppCompat"tools:targetApi="31"><activityandroid:name=".LoginActivity"android:exported="true"android:label="@string/app_name"android:theme="@style/Theme.AppCompat"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application>
</manifest>

 具体实现效果图:

总结

以上就是简单的登录界面的设计的所有内容,简单介绍了线性布局以及相应属性的应用。

如果这篇文章对你或你的朋友有帮助的话,请多多支持和分享,让更多的人受益。同时,如果你有任何问题或疑问,也欢迎在下方留言,我会尽快回复并帮助你解决问题。让我们一起共同进步,共同学习!

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

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

相关文章

蓝桥杯物联网竞赛_STM32L071KBU6_关于size of函数产生的BUG

首先现象是我在用LORA发送信息的时候&#xff0c;左边显示长度是8而右边接收到的数据长度却是4 我以为是OLED显示屏坏了&#xff0c;又或者是我想搞创新用了const char* 类型强制转换数据的原因&#xff0c;结果发现都不是 void Function_SendMsg( unsigned char* data){unsi…

【云原生】Kubernetes基础命令合集

目录 引言 一、命令概述 &#xff08;一&#xff09;命令分类 &#xff08;二&#xff09;基本语法 二、查看基本信息 &#xff08;一&#xff09;环境指令 1.查看版本信息 2.查看资源对象简写 3.添加补全信息 4.查看日志 5.查看集群信息 &#xff08;二&#xff0…

数据结构(三)

数据结构&#xff08;三&#xff09; 图状关系顺序存储链式存储十字链表法多重链表法 图的遍历佛洛依德算法迪杰斯特拉算法洪水算法 图状关系 按有无方向分&#xff1a;有向图、无向图 按是否有权值&#xff1a;带权图、不带权图 顺序存储 链式存储 十字链表法 多重链表法 图…

【笔记】软件架构师要点记录(2)

【笔记】软件架构师要点记录 20240523案例一案例二案例三案例四案例五案例六案例七案例十 20240523 基于前10个架构案例场景&#xff0c;对用到的专业术语进行整理&#xff0c;方便后续查看。 案例一 MVC架构风格组件交互方式 MVC是一种用来构建用户界面时采用的架构设计风格…

攻防世界[GoodRe]

攻防世界[GoodRe] 学到知识&#xff1a; 逆向的精髓&#xff1a;三分懂&#xff0c;七分蒙。TEA 算法快速识别&#xff08;蒙&#xff09;&#xff1a; 数据处理的形式&#xff1a;进入加密时的数据和加密结束后的数据&#xff0c;处理时数据的分组等等&#xff0c;都能用来…

使用libtorch加载YOLOv8生成的torchscript文件进行目标检测

在网上下载了60多幅包含西瓜和冬瓜的图像组成melon数据集&#xff0c;使用 LabelMe 工具进行标注&#xff0c;然后使用 labelme2yolov8 脚本将json文件转换成YOLOv8支持的.txt文件&#xff0c;并自动生成YOLOv8支持的目录结构&#xff0c;包括melon.yaml文件&#xff0c;其内容…

VMware虚拟机如何与主机共享文件夹

本机:WIN10 VMware虚拟机:WIN7 因为每次配置都爱忘记操作,目标是为了在WIN7虚拟机中可以访问本机文件 首先本机操作 新建一个共享文件夹,不带中文目录(最好不要) 点击共享 选择everyone,记得权限"读取和写入" 然后到虚拟机里面 添加一个网络位置 点击浏览,选择网…

第一节:Redis的数据类型和基本操作

最近整理了关于Redis的一些文档&#xff0c;分享给大家&#xff0c;后续会持续更新...... Redis的数据类型 字符串String String&#xff1a;字符串&#xff0c;可以存储String、Integer、Float型的数据&#xff0c;甚至是二进制数据&#xff0c;一个字符串最大容量是512M 列表…

IS-IS DIS

原理概述 OSPF 协议支持4种网络类型&#xff0c; IS-IS 协议只支持两种网络类型&#xff0c;即广播网络和点到点网络。与 OSPF 协议相同&#xff0c; IS-IS 协议在广播网络中会将网络视为一个伪节点( Pseudonode &#xff0c;简称 PSN )&#xff0c;并选举出一台 DIS ( Designa…

ISCC2024个人挑战赛WP-WEB

&#xff08;非官方解&#xff0c;以下内容均互联网收集的信息和个人思路&#xff0c;仅供学习参考&#xff09; 还没想好名字的塔防游戏 GET /world.js HTTP/1.1 Host: 101.200.138.180:17345 Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/avif,i…

springcloud多个服务共用同一个nacos配置

spring:profiles:active: devcloud:nacos:config:server-addr: 172.168.1.xx:8848enabled: truefile-extension: yamlnamespace: public#按需引入nacos中的配置#shared-configs: database.yamlextension-configs:# 数据源配置- data-id: database.yamlgroup: DEFAULT_GROUP# re…

系统思考—问题分析与持续改进

刚刚为一家500强企业完成了《系统思考—问题分析与持续改进》的课程。学员们开始意识到&#xff0c;不能仅仅停留在冰山上层事件去解决问题&#xff0c;而是要深入观察隐藏在背后的趋势变化。学会如何识别系统中的深层次原因&#xff0c;并从全局视角来制定更加有效的改进策略。…

电子电器架构 - 车载网管功能简介

电子电器架构 - 车载网管功能简介 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,…

Windows下安装配置深度学习环境

Windows下安装配置深度学习环境 1. 准备工作 1.1 环境准备 操作系统&#xff1a;win10 22H2 GPU&#xff1a;Nvidia GeForce RTX 3060 12G 1.2 安装Nvidia驱动、cuda、cuDNN 下载驱动需要注册并登录英伟达账号。我这里将下面用到的安装包放到了百度网盘&#xff0c;可以关注微信…

DFA 算法

为什么要学习这个算法 前一段时间遇到了瓶颈&#xff0c;因为词库太多了导致会有一些速度过慢&#xff0c;而且一个正则表达式已经放不下了&#xff0c;需要进行拆分正则才可以。 正好我以前看过有关 dfa 的介绍&#xff0c;但是并没有深入的进行研究&#xff0c;所以就趁着周…

词条唤夜兽唤夜兽的养殖与护理 幻兽帕鲁 唤夜兽怎么获取 唤夜兽去哪里抓 crossover玩Steam游戏

唤夜兽在地图上没有出现&#xff0c;是唤冬兽和雷冥鸟共同培育出来的帕鲁。 ------------------------- 介绍&#xff1a; 帕洛斯群岛之守护神&#xff0c;拥呼唤黑夜之力。 其会于灾厄席捲大地之际腾空而起&#xff0c;唤来无尽暗夜&#xff0c;试图封印灾厄。 ---------…

mac操作系统下,docker登录nexus私库,提示不支持https协议的错误

一、背景 我们使用nexus搭建了一个Docker Registry私有仓库&#xff0c;在Mac操作系统&#xff0c;在推送本地镜像到私库前&#xff0c;要求我们登录私库&#xff0c;报错如下&#xff1a; docker login 192.168.5.6:8086 -u username -p passwordWARNING! Using --password …

设计模式10——装饰模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 装饰模式 是一种行为型模式。…

推荐丨快速申请免费域名证书

背景&#xff1a; 域名是一个IP地址上的“面具” 。一个域名的目的是便于记忆和沟通的一组服务器的地址(网站&#xff0c;电子邮件&#xff0c;FTP等)。 通俗的说&#xff0c;域名就相当于一个家庭的门牌号码&#xff0c;别人通过这个号码可以很容易的找到你。 域名不仅便于记…

Facebook广告如何开户以及投放费用?

Facebook作为全球最大的社交媒体平台之一&#xff0c;成为了企业与个人推广品牌、产品或服务的重要渠道。其精准的广告定向功能和庞大的用户基数&#xff0c;为广告主提供了无限的商机。云衔科技为企业提供专业的Facebook上开户和运营服务&#xff0c;助力您高效获客。 一、Fa…