[Android学习] 1. 简易登录界面设计

2023-10-27

通过对活动及控件的学习,今天制作一个简易登录界面。简要记录一下操作过程、遇到的问题及学到的经验,希望各位老师多多提出问题不吝赐教!

 预期设计效果图

 设计要求:

1.布局不限,参考上图;

2.利用EditText制作输入框,有语言提示;

3.登录注册忘记密码有跳转;

4.账号密码写死,登陆成功,密码错误用Toast or Dialog进行提示;

设计思路:

本次不使用Linear布局而采用更加可视化的Constraint布局,利用TextView作为标题文本框;两个EditText作为账号密码的输入框;三个Button按钮分别作为登录,注册,忘记密码;

设计代码:

//--------------------主活动布局段代码---------------------------//
<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background"                  
    tools:context=".MainActivity">
    //------------------TextView:welcome----------------//
    <TextView
        android:id="@+id/textView"
        android:layout_width="285dp"
        android:layout_height="64dp"
        android:gravity="center"
        android:text="W E L C O M E"
        android:textSize="35dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.124" />
    
    //-----------------EditText:UserName-------------------//
    <EditText
        android:id="@+id/Edit_account"
        android:layout_width="345dp"
        android:layout_height="50dp"
        android:layout_gravity="center"
        android:background="@drawable/edit_background"
        android:gravity="center"
        android:hint="请输入账号"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.342" />
   
    //-----------------EditText:Password-------------------//
    <EditText
        android:id="@+id/Edit_password"
        android:layout_width="344dp"
        android:layout_height="52dp"
        android:layout_gravity="center"
        android:background="@drawable/edit_background"
        android:gravity="center"
        android:hint="请输入密码"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    
    //--------------------Button1:Login-------------------//
    <Button
        android:id="@+id/bn1"
        android:layout_width="283dp"
        android:layout_height="73dp"
        android:layout_gravity="center"
        android:background="@null"
        android:outlineProvider="none"
        android:text="登   录"
        android:textSize="25dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.506"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.745" />
 
    //--------------------Button2:Rollin-------------------//
    <Button
        android:id="@+id/bn2"
        android:layout_width="91dp"
        android:layout_height="33dp"
        android:background="@null"
        android:gravity="center"
        android:text="注册账号"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.294"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.939" />
    
    //--------------------Button3:ForgetPassWord-------------------//
    <Button
        android:id="@+id/bn3"
        android:layout_width="97dp"
        android:layout_height="34dp"
        android:background="@null"
        android:gravity="center"
        android:text="忘记密码"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.709"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.94" />

</androidx.constraintlayout.widget.ConstraintLayout>

在写整个布局文件时,遇到很多问题:

1.在Contraint布局中,设计布局没问题,一运行整个布局乱飞,直接报下列错误。

This view is not constrained, it only has designtime positions, so it will jump to (0,0) unless you add constraints

解决:原因并未对控件设置约束,对控件四个边设计约束,一个是用布局下方的魔术棒(“infer Constrains)自动约束,这会导致控件乱飞使用少控件,或者每次插入先infer;其次就是将每个控件四个边连接到整个parent四个边上;

2.设置EditText文本框的样式、背景:

解决:在drawable文件夹下新建edit_background布局,在其中设置形状,四角弯曲度、颜色..;


<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

   <item>
       <shape
           android:shape="rectangle">
       <solid
           android:color="#efefef"/>
       <corners
           android:radius="8dp"/>
       <stroke
           android:width="2dp"
           android:color="#505050"/>
       </shape>
   </item>
</layer-list>

​

在布局文件中将自定义文本框布局引入:android:background="@drawable/edit_background"

3. 设置Button按钮背景不透明;

解决:

1.在res/values/中找到两个theme文件,将其中这一行:

    <style name="Theme.LoginInSystem" parent="Theme.MaterialComponents.DayNight.DarkActionBar">

都改为:

    <style name="Theme.LoginInSystem" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">

 之后对Button按钮布局文件中引入  android:background="@null"

主活动代码

//-----------------主活动代码--------------------------------//
package com.example.logininsystem;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    //定义账号密码;
    private String setaccount="123";
    private String setpassword="123";
    //定义控件对象;
    private EditText username,password;
    Button bn1,bn2,bn3;
    Intent In1,In2,In3;
    AlertDialog.Builder dialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.bn1).setOnClickListener(this);
        findViewById(R.id.bn2).setOnClickListener(this);
        findViewById(R.id.bn3).setOnClickListener(this);
        username =  findViewById(R.id.Edit_account);
        password =  findViewById(R.id.Edit_password);
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()){
            //登录成功跳转&&登陆失败警告!
            case(R.id.bn1):
                if(setaccount.equals(username.getText().toString())&&
                        setpassword.equals(password.getText().toString()))
                {
                   In1 = new Intent(MainActivity.this,LogInSuccess.class);
                   startActivity(In1);
                }
                else
                    {
                    dialog = new AlertDialog.Builder(MainActivity.this);
                    dialog.setTitle("Warning");
                    dialog.setMessage("用户名密码错误,请重试!");
                    dialog.setCancelable(false);
                    dialog.setPositiveButton("确认", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                        }
                    });dialog.show();
                    }
                break;
            case(R.id.bn2):
                In2 = new Intent(MainActivity.this,RollIn.class);
                startActivity(In2);break;
            case(R.id.bn3):
                In3= new Intent(MainActivity.this,Forget.class);
                startActivity(In3);break;
        }
    }
}

最终效果图:

                           

自己做的第一个登陆界面,虽然只是一些简单的控件组合,但最终自己能搞出来还是很有成就感的,也算找个地方记录一下自己出现的问题以便未来的工作学习。

望共勉!

谢谢!

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Android学习] 1. 简易登录界面设计 的相关文章

  • 如何使用 Retrofit 解析嵌套 json....?

    我不知道该怎么办使用 Retrofit 解析 json 熟悉使用 Retrofit 解析简单的 json 但不熟悉解析嵌套Json using Retrofit 这是我的 Json 数据 current observation image
  • 如何在java中将日期格式从YYMMDD更改为YYYY-MM-DD? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我从机器可读代码中获取日期格式为 YYMMDD 如何将其更改为 YYYY MM DD 例如我收到 871223 YYMMDD 我想把它改成
  • 如何仅从 Firestore 获取最新更新的数据?

    在 Firestore 上发现任何更改时始终获取整个文档 如何只获取最近更新的数据 这是我的数据 我需要在第一次加载时在聊天中按对象顺序 例如 2018 09 17 30 40 msg和sendby 并且如果数据更新则仅获取新的msg和se
  • Android应用主题更换流畅

    我正在开发一个提供白天和夜间主题的项目 我正在更改主题 夜间主题 AppCompatDelegate setDefaultNightMode AppCompatDelegate MODE NIGHT YES 日主题 AppCompatDel
  • 将人类日期(当地时间 GMT)转​​换为日期

    我正在服务器上工作 服务器正在向我发送 GMT 本地日期的日期 例如Fri Jun 22 09 29 29 NPT 2018在字符串格式上 我将其转换为日期 如下所示 SimpleDateFormat simpleDateFormat ne
  • react-native android fontFamily 不生效

    问题一 我在index android js的欢迎样式中添加了fontFamily 但没有效果 fontFamily 真的可以在 Android 上使用吗 欢迎 字体大小 20 fontFamily roboto thin 文本对齐 居中
  • Akka 与现有 java 项目集成的示例

    如果我已经有现有的javaWeb 应用程序使用spring and servlet容器 将 Akka 集成到其中的正确方法是什么 就像我将会有Actor1 and Actor2互相沟通的 开始使用这些演员的切入点是什么 例如 1 把它放在那
  • 如何使用 JMagick 转换色彩空间?

    如何使用 JMagick API 转换色彩空间 例如 CMYK gt RGB 和 RGB gt CMYK None
  • 在Java中运行bat文件并等待

    您可能会认为从 Java 启动 bat 文件是一项简单的任务 但事实并非如此 我有一个 bat 文件 它对从文本文件读取的值循环执行一些 sql 命令 它或多或少是这样的 FOR F x in CD listOfThings txt do
  • Android:如何创建模态进度“轮”叠加层?

    我想在我的视图上显示模式进度 轮子 叠加层 ProgressDialog 很接近 但我不想要对话框背景或边框 我尝试设置对话框窗口的背景可绘制 this progressDialog new ProgressDialog Main this
  • JDBC 时间戳和日期 GMT 问题

    我有一个 JDBC 日期列 如果我使用 getDate 则会得到 date 仅部分2009 年 10 月 2 日但如果我使用 getTimestamp 我会得到完整的 date 2009 年 10 月 2 日 13 56 78 890 这正
  • 以编程方式向 LinearLayout 添加边框

    我该如何添加以编程方式LinearLayout 的边框 假设我们创建了这个布局 LinearLayout TitleLayout new LinearLayout getApplicationContext TitleLayout setO
  • 为什么\0在java中不同系统中打印不同的输出

    下面的代码在不同的系统中打印不同的输出 String s hello vsrd replace 0 System out println s 当我在我的系统中尝试时 Linux Ubuntu Netbeans 7 1 它打印 When I
  • Spring @Cacheable 和 @Async 注解

    我需要缓存一些异步计算的结果 具体来说 为了克服这个问题 我尝试使用 Spring 4 3 缓存和异步计算功能 作为示例 我们采用以下代码 Service class AsyncService Async Cacheable users C
  • Android:分配内存失败

    我正在尝试创建一个具有 2047 mb 内存的模拟器 当我运行它时 我收到此错误 2011 02 22 14 24 14 Emulator 2011 02 22 14 24 14 Emulator This application has
  • Activity 暂停时调用 FragmentManager.popBackStack 是否安全

    的文档FragmentManager popBackStack https developer android com reference android app FragmentManager html popBackStack java
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • Android View Canvas onDraw 未执行

    我目前正在开发一个自定义视图 它在画布上绘制一些图块 这些图块是从多个文件加载的 并将在需要时加载 它们将由 AsyncTask 加载 如果它们已经加载 它们只会被绘制在画布上 这工作正常 如果加载了这些图片 AsyncTask 就会触发v
  • View.post(),以及当Runnables被执行时

    我最初的问题是需要知道我的根的高度和宽度View这样我就可以进行程序化的布局更改 就我的目的而言 我不一定需要在onCreate 对于我来说 以编程方式添加我的孩子就足够了View根布局完成后 因此我很乐意使用onWindowFocusCh
  • Keystore getEntry 在 Android 9 上返回 NULL

    c我已对存储在 Android 密钥库中的登录密码进行了加密和解密 在 Android 9 上 我观察到应用程序在尝试解密密码时崩溃 我无法重现它 但拥有 Pixel 3 的用户是崩溃的设备之一 下面是我如何从密钥库解密密码 private

随机推荐

  • Eolink 出席 QECon 大会,引领「AI+API」技术的革新浪潮

    7月28日 29日 第八届 QECon 质量效能大会在北京成功召开 大会聚焦 数生智慧 高质量发展新引擎 深入探讨如何利用数字化和智能化技术推动软件质量的发展 进而为高质量的经济发展提供新的引擎 作为国内 API 全生命周期解决方案的领军者
  • python通过input()函数输入的内容是什么类型

    说明 通过input 函数 可以从标准输入读取内容 那么读到的内容是什么类型呢 通过type 函数可以进行判断 另外 通过input 函数的官方解释 从标准输入读取一个字符串 所以 应该是字符串类型 在此验证下 操作过程 1 input 结
  • 最大差值

    题目描述 HKE最近热衷于研究序列 有一次他发现了一个有趣的问题 对于一个序列A 1 A 2 cdots A nA1 A2 An 找出两个数i ji j 1 leq i
  • 【计网】5.链路层:链路、接入网和局域网

  • mysql关联n张表_mysql left join 左连接查询关联n多张表

    最近用mysql 多表关联查询比较多 特此总结一下left join用法 拓展下left join将多表关联 left join 左连接即以左表为基准 显示坐标所有的行 右表与左表关联的数据会显示 不关联的则不显示 关键字为left joi
  • C++ 类的静态成员详解【static】

    目录 前言 一 类的静态成员 1 static关键字 2 静态成员变量 3 静态成员函数 二 程序样例 1 程序演示 2 程序截图 总结 前言 本文记录C 中 static 修饰类成员成为静态成员 其中包括静态成员类别 作用和程序演示 嫌文
  • Mysql在Mac终端以及Navicat 的基本操作

    1 进入MySQL 打开终端 输入 usr local MySQL bin mysql u root p 其中 root为数据库用户名 输入密码后 密码输入不会被显示 2 接下来就可以对数据库进行操作了 创建数据库 create datab
  • 【ML&DL】【skimming】The Loss Surfaces of Multilayer Networks

    补了一下Yann LeCun的经典工作The Loss Surfaces of Multilayer Networks 1 论文一览 痛点 文章假设并且陆续证明了这样一些事情 1 对于大网络 large size network 而言 绝大
  • 学生写字灯哪个牌子好?精选学生专用台灯第一品牌

    每个孩子的成长都是父母的心头大事 不管是学习上 身体上都想给予孩子最好的 甚至学习也会买台灯 光源的选择也是很重要的 学生在写字的时候用什么台灯牌子比较好呢 今天就来详细介绍一下 几款护眼的学生台灯 一 南卡护眼台灯L1 参考价 399元
  • 你想要的一眼就知道的【Symbol】

    js的基本数据类型 基本类型 String Boolean Number Symbol Undefind Null 引用类型 Array Object Function Symbol 什么是Symbol 是js语言的一种数据类型 和Stri
  • Bus error (core dumped)问题

    问题描述 项目中有多线程的操作 一个线程运行没有问题 两个线程同时运行时 出现报错 Bus error core dumped 原因分析 问题的原因 指针的中赋值与内容拷贝的问题 业务逻辑中有图像数据的拷贝过程 图像数据是unsinged
  • Mysql之视图、索引【第五篇】

    大纲 一 视图 1 什么是视图 1 MySQL 视图 View 是一种虚拟的表 是从数据库中一个或多个表中导出来的表 视图由列和行构成 行和列的数据来自于定义视图的查询中所使用的表 并且还是在使用视图时动态生成的 2 数据库中存放了视图的定
  • ipfs使用二进制文件部署私有链

    注 此版本仅适用于ipfs go ipfs v0 4 18 版本 IPFS多节点 才能构建一个本地的分布式文件系统 在联盟链开发环境下 多数会使用到IPFS多节点私有网存储文件 一 IPFS二进制安装 1 1 下载ipfs二进制文件 wge
  • Python接口自动化测试之详解post请求

    前言 在HTTP协议中 与get请求把请求参数直接放在url中不同 post请求的请求数据需通过消息主体 request body 中传递 且协议中并没有规定post请求的请求数据必须使用什么样的编码方式 所以其请求数据可以有不同的编码方式
  • wpscloudsvr.exe 怎么删除

    WPS Office安装之后 一直很卡 主要是wpscloudsvr exe这个登录账号的进程太卡了 把它禁止了就行了 1 打开 任务管理器 gt 服务 gt 找到 wpscloudsvr 右键 停止 2 先打开wps 任务管理器 gt 进
  • python 使用 pymssql 调用存储过程并让他返回值

    众所周知 pymssql 库并不支持 暂时 调用存储过程 只能使用原生的sql 语句让其调用 这样一来如果需要让pymssql调用存储过程并让其返回值 显然return语句是不能用了 但是我们可以使用 select 语句让其返回值 比如 我
  • Redis之key和value可以存储的最大值

    文章目录 Redis之key和value可以存储的最大值 1 Redis的key可以存储的最大值 2 Redis的value可以存储的最大值 Redis之key和value可以存储的最大值 1 Redis的key可以存储的最大值 虽然Key
  • ue4文档学习进度

    由于Ue4文档很多 有时又间隔一段时间再看 忘了在哪里了 所以先记录下 截至2022年1月18日 触发器Actor https docs unrealengine com 4 26 zh CN Basics Actors Triggers
  • STM32野火指南者中断EXTI按键点灯

    一 野火官方中断框图 1 输入线 外部中断选择 如 EXTI0 EXTI19 2 配置中断所需寄存器 如 GPIO EXTI NVIC 3 按键1按键2 采用上升沿 下降沿触发 自己设定 二 编程顺序 1 初始化GPIO 即连接到EXTI的
  • [Android学习] 1. 简易登录界面设计

    通过对活动及控件的学习 今天制作一个简易登录界面 简要记录一下操作过程 遇到的问题及学到的经验 希望各位老师多多提出问题不吝赐教 预期设计效果图 设计要求 1 布局不限 参考上图 2 利用EditText制作输入框 有语言提示 3 登录注册