登录界面设计

Android简单登录界面布局设计 小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!资料⬅专栏获取t=“读书” 阅读详情

效果图:

这里写图片描述

这里写图片描述

1、UI界面设计

采用RelativeLayout布局,主要说中间这块输入账号与密码的设计。

分别采用两个LinearLayout,在往里加上控件,调整位置。

那条灰色的线通过控件View实现。

这里首先隐藏了删除按钮的图片,如果输入数据的 时候,自然会显示出来。

android:visibility="invisible"

还有一些自己添加的style与color。

button.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <!--设置背景色-->
    <solid android:color="#2634c2" />
    <!--设置圆角-->
    <corners android:radius="10dip" />
    <stroke android:width="1dp" android:color="#4e4d56" />
</shape>

color.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#5c5f6c</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
    <color name="colorButton">#2634c2</color>
    <color name="background">#ddefeeee</color>
</resources>

style.xml:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimaryDark</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="MyEditText" parent="Theme.AppCompat.Light">
        <item name="colorControlNormal">@android:color/darker_gray</item>
        <item name="colorControlActivated">@android:color/darker_gray</item>
    </style>

    <style name="MyCheckBox" parent="Theme.AppCompat.Light">
        <item name="colorControlNormal">@android:color/darker_gray</item>
        <item name="colorControlActivated">@android:color/darker_gray</item>
    </style>
</resources>

UI界面代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_marginTop="50dp"
        android:layout_centerHorizontal="true"
        app:srcCompat="@drawable/dragon" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="170dp"
        android:text="双木非林,田下有心"
        android:textSize="20dp"
        />


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center"
        android:layout_marginTop="230dp"
        android:background="@color/background"
        >

        <ImageView
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:src="@drawable/user"
            android:layout_marginLeft="40dp"
            android:layout_marginRight="5dp"
            />

        <View
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:layout_marginTop="15dp"
            android:layout_marginBottom="15dp"
            android:layout_marginRight="3dp"
            android:layout_marginLeft="5dp"
            android:background="#979595"
            />

        <EditText
            android:id="@+id/user"
            android:layout_width="290dp"
            android:layout_height="50dp"
            android:layout_marginLeft="8dp"
            android:background="@null"
            android:hint="输入账号..."
            android:textSize="14sp"
            android:theme="@style/MyEditText"
            />

        <ImageView
            android:id="@+id/delete"
            android:layout_width="25dp"
            android:layout_height="35dp"
            android:src="@drawable/delete"
            android:layout_marginRight="20dp"
            android:visibility="invisible"
            />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center"
        android:layout_marginTop="270dp"
        android:id="@+id/linearLayout"
        android:background="@color/background"
        >

        <ImageView
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:src="@drawable/password"
            android:layout_marginLeft="40dp"
            android:layout_marginRight="5dp"
            />

        <View
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:layout_marginTop="15dp"
            android:layout_marginBottom="15dp"
            android:layout_marginRight="3dp"
            android:layout_marginLeft="5dp"
            android:background="#979595"
            />

        <EditText
            android:id="@+id/pssword"
            android:layout_width="290dp"
            android:layout_height="50dp"
            android:layout_marginLeft="8dp"
            android:background="@null"
            android:hint="输入密码..."
            android:inputType="textPassword"
            android:textSize="14sp"
            android:theme="@style/MyEditText"
            />

        <ImageView
            android:id="@+id/delete1"
            android:layout_width="25dp"
            android:layout_height="35dp"
            android:src="@drawable/delete"
            android:layout_marginRight="20dp"
            android:visibility="invisible"
            />

    </LinearLayout>

    <CheckBox
        android:id="@+id/checkBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/linearLayout"
        android:layout_marginEnd="39dp"
        android:layout_marginRight="39dp"
        android:layout_marginTop="20dp"
        android:text="记住账号与密码"
        android:textColor="@color/colorPrimary"
        android:theme="@style/MyCheckBox"
        />

    <Button
        android:id="@+id/login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="400dp"
        android:background="@drawable/button"
        android:gravity="center"
        android:onClick="login"
        android:text="登录"
        android:textColor="@android:color/white"
        android:textSize="20dp" />


</RelativeLayout>

2、逻辑实现

隐藏应用最上面的蓝色框体:

    getSupportActionBar().hide();

在onCreate()函数中新建SharedPreferences对象,用于存放与读取数据。

mSp = this.getSharedPreferences("config", this.MODE_PRIVATE);

主要是获取控件,并实现隐藏删除控件与实现删除的逻辑。

addTextChangedListener()获取EditText的输入状态,并作出相应的响应。

private void initView() {
        mUser = findViewById(R.id.user);
        mPssword = findViewById(R.id.pssword);
        mLogin = findViewById(R.id.login);
        mRememberInfo = findViewById(R.id.checkBox);
        mDelete = findViewById(R.id.delete);
        mDelete1 = findViewById(R.id.delete1);

        mDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mUser.setText("");
            }
        });

        mDelete1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mPssword.setText("");
            }
        });

        mUser.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (s.length() > 0) {
                    //显示清除按钮
                    mDelete.setVisibility(View.VISIBLE);
                } else {
                    //隐藏清除按钮
                    mDelete.setVisibility(View.INVISIBLE);
                }
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

        mPssword.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (s.length() > 0) {
                    //显示清除按钮
                    mDelete1.setVisibility(View.VISIBLE);
                } else {
                    //隐藏清除按钮
                    mDelete1.setVisibility(View.INVISIBLE);
                }
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

    }

登录按钮的逻辑实现:

TextUtils.isEmpty()检测字符串是否为空。

如果记住账号与密码的复选框被选中,将输入存入文件中。

putString()需要key与value,value就是我们需要存入的数据,key是用来查找相应数据的,按什么顺序存入的数据,就需要按什么顺序读取出来。

if(mRememberInfo.isChecked()) {
                    SharedPreferences.Editor editor = mSp.edit();
                    editor.putString("user", user);
                    editor.putString("password", password);
                    editor.commit();
                }
 public void login(View view) {
        String user =  mUser.getText().toString().trim();
        String password = mPssword.getText().toString().trim();

        if(TextUtils.isEmpty(user) || TextUtils.isEmpty(password)) {
            Toast.makeText(MainActivity.this, "账号与密码不能为空!", Toast.LENGTH_SHORT).show();
        }
        else {
            if("10086".equals(user) && "10010".equals(password)) {

                if(mRememberInfo.isChecked()) {
                    SharedPreferences.Editor editor = mSp.edit();
                    editor.putString("user", user);
                    editor.putString("password", password);
                    editor.commit();
                }

                Toast.makeText(MainActivity.this,"登录成功!", Toast.LENGTH_SHORT).show();
            }
            else {
                SharedPreferences.Editor editor = mSp.edit();
                editor.putString("user", "");
                editor.putString("password", "");
                editor.commit();
                Toast.makeText(MainActivity.this,"登录失败!", Toast.LENGTH_SHORT).show();
            }
        }
    }

如果记住账号与密码的框被选中,则退出app后,下一次登录会再显示账号与密码,前提是上一次输入的账号与密码都正确。

public void restoreInfor() {
        String user = mSp.getString("user", "");
        String pwd = mSp.getString("password", "");
        mUser.setText(user);
        mPssword.setText(pwd);
    }
Android Studio制作简单登录界面 应用线性布局设计登录界面,要求点击输入学号时弹出数字键盘界面,点击输入密码时弹出字母键盘,出现的文字、数字、尺寸等全部在values文件夹下相应.xml文件中设置好,使用时直接引用。当用户名或密码为空,显示一个提示信息“用户名与密码不能为空!”,当用户名和密码匹配,显示“登录成功”。 阅读详情

相关推荐

qt的简单登录界面设计

qt的简单登录界面设计

Huge_Whale的博客 1240

Android开发 登录注册设计

用Android Studio 简单的实现登录注册。

qq_51936803的博客 2万+

QT登录界面设计

QT登录界面设计

mid_summer_lzp的博客 1135

Android实现简单的登陆页面(最新版2023详细图文教程

表示控件的宽度会根据其内部内容的宽度自适应调整,即控件的宽度由其内部的内容而定。则会让控件的宽度自适应其内部的内容宽度。同时,也可以通过设置具体的数值来控制控件的宽度,如。android:layout_gravity="center" --设置标签位置。android:textAlignment="center"--文字排列 居中。表示控件的宽度与其父容器的宽度相同,充满整个父容器;android:id="@+id/"--设置id。设置背景,可填入需要颜色的16进制。会让控件的宽度填充满父容器,而。

Alphamilk的博客 1万+

Android精美登录界面设计

在网上在到一个登录界面感觉挺不错的,给大家分享一下~先看效果图:   这个Demo除了按钮、小猫和Logo是图片素材之外,其余的UI都是通过代码实现的。   一、背景   背景蓝色渐变,是通过一个xml文件来设置的。代码如下:   background_login.xml <gradient android:startColor="#FFACDAE5" a

青春的光与影 3万+

C#窗体实验——简单登录界面设计

实验要求:利用基本的控件,设计一个简单的登录界面,并且对密码经行验证。 啥也别说,咱上代码! using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System....

菇凉小伙de博客 4240

基于LVGL的登录界面设计

这是一个基于LVGL的登录界面设计,可以通过键盘手动输入密码图片按钮进入登录界面记住密码以及自动登录的功能,在此之前,我已经讲解过该项目的部分部件,我们可以去跳转。LVGL部件篇:按钮部件(lv_btn)-优快云博客在实际的LVGL项目工程中,按钮部件的使用频率是非常高的,它常用于控制设备的启停。在 LVGL中,当按钮部件被创建出来之后,其默认是一个圆角矩形,较为遗憾的是,按钮部件并不能直接设置文本。按钮部件(lv_btn)仅有一个组成部分:主体背景,示意图如下:关于部件样式设置的内容,请大家看我。

m0_74676415的博客 2297

Android很好看的登陆界面(包含详细代码)

在这里给大家安利一下设计风格,这个组件库的里面的组件和Android原生的组件的设计风格几乎相同,只不过里面加了很多个性化的设置,可以根据自己的需求去自行设计样式,里面的组件的各种性质,几乎可以满足我们的日常需求,还没有使用过的Android开发小伙伴可以去尝试一下。

m0_58941767的博客 7631

html怎么设置用户登录界面设计,html怎么做用户登录界面设计步骤,登录界面设计这样做?...

大家在进入一个APP的时候都会碰到登录界面,那么你知道html怎么做用户登录界面设计的吗?html怎么做用户登录界面设计步骤有哪些,看看登录界面设计怎么做最符合客户需求呢?html怎么做用户登录界面设计的步骤:步骤1、首先,下载html5开发软件Intellij IDEA,这个直接在百度搜索框中搜索即可。步骤2、打开软件,点击file,选择New project,在弹出的对话框中,选择static...

weixin_39982933的博客 7347

基于QT的登录界面设计教程

QT是一个跨平台的C++图形用户界面应用程序开发框架,广泛应用于桌面、嵌入式和移动应用开发。QT提供了一套丰富的API和工具集,可以快速创建性能良好的应用程序。它包括QT Widgets、QT Quick以及QT WebEngine等模块,涵盖了从基础窗口小部件到动态图形界面以及网页内容嵌入的多个层面。自定义信号和槽是构建复杂用户界面的基础。为了创建一个自定义信号,开发者需要继承自QObject,并在类的声明中使用signals关键字。自定义槽函数则可以是任何可调用的对象,只要它的签名与信号匹配。

weixin_36431145的博客 1481

登录界面设计与实现的探索

本文还有配套的精品资源,点击获取 简介:登录界面在IT行业中是用户与应用程序互动的起点,其设计和实现对用户体验和安全性至关重要。本文将讨论登录界面的基本元素、安全性措施、用户体验改进、前后端交互以及测试。同时,强调了响应式设计和界面优化的重要性,以及开发过程中设计与技术的协同工作。 1. 登录界面基本元素设计 界面布局与美学原则 在设计登录界面时,布局...

weixin_42471823的博客 1611

C#WPF实战出真汁03--登录界面设计

摘要:本文介绍了登录界面设计的核心要点与WPF实现方案。设计部分强调简洁布局(不超过5个字段)、清晰视觉层次和响应式设计;WPF实现采用Grid/StackPanel布局,包含账号密码输入、记住密码等功能控件,使用MaterialDesign美化界面。文末附完整XAML代码实现,包含渐变背景、圆角按钮等现代UI元素,并提示后台逻辑需处理数据验证和用户交互。整体兼顾美观性与实用性,提供完整的登录界面开发参考方案。(149字)

hqwest的专栏 1323

Labview登录界面设计与实现

在LabVIEW中设计面板时,我们使用各种元素来构建用户界面。这些元素分为几大类,包括数值、布尔、字符串、数组和簇控件以及图表和图形显示。每一类都代表了不同类型的数据和用户交互方式。数值控件与指示器:用于显示和输入数值数据,如数字和复数。布尔控件与指示器:用于表示布尔值(真或假),通常以开关形式出现。字符串控件与指示器:用于处理文本数据。数组控件与指示器:用于表示数据的集合,允许用户访问特定数组元素。簇控件与指示器:用于打包不同类型的数据为单一单位。

weixin_36012152的博客 852

Qt 登录界面设计

程序简介: 创建一个用户注册界面,用户输入注册信息后,点击“注册”按钮,将用户信息写入文件,并弹出对话框显示“xxx用户,您好!恭喜您已经注册成功。” 写入文件的用户信息 用户名、姓名、邮箱、性别、出生日期、注册日期时间、个人爱好等 要求:注册用户名必须唯一,如有重复则注册不成功,程序应给出提示;邮箱检查合法性;性别要求选择;出生日期从下拉菜单或日历中选择;注册日期时间为系统时间;个人爱好

hao_zong_yin的博客 7496

【Flow3D实战】从零构建水利冲淤模型:关键步骤与参数详解

本文详细介绍了使用Flow3D构建水利冲淤模型的关键步骤与参数设置技巧。从基础认知到前处理、计算设置和后处理,全面解析如何高效模拟水流与泥沙的相互作用,特别适用于桥墩冲刷、水库泄洪等工程场景。通过实战案例分享,帮助读者掌握Flow3D在水利工程中的精准应用,提升模型精度与计算效率。

weixin_42549723的博客 504

物理学建模及仿真平台Chrono安装

Chrono是一个基于物理学的建模和仿真基础设施,它是在C++中实现的独立于平台的开源设计。一个projectchrono库可以嵌入到一个软件项目中,例如在可变形地形上运行的轮式和履带式车辆、机器人、机械电子系统、顺应性机构和流体固体相互作用现象。系统可以由刚性和柔性/顺应性部件组成,并带有约束、电机和接触;部件可以具有三维形状,以便进行碰撞检测。然而安装还是出现了一些问题,所以在此总结。已经装好visual studio。

Already8888的博客 6501

Matlab GUI登录界面设计

Matlab GUI登录界面设计 去发现同类优质开源项目:https://gitcode.com/ 欢迎来到Matlab GUI登录界面设计资源库!此资源文件为您提供了一个精美的Matlab GUI登录界面设计,非常适合用于各类工程项目或学术研究。以下是关于该资源文件的详细介绍: 资源描述 本资源包含了一个Matlab GUI登录界面设计,界面美观、功能完善。通过此设计,您可以快速搭建出一个用于用...

gitblog_06784的博客 413

CDR学习笔记——02

这篇写一些高级CDR的架构原理。

... 1017

Android studio 用户登录界面设计

Android studio 用户登录界面设计如何用Android studio 设计登录界面 如何用Android studio 设计登录界面 acrivity_main.xml // acrivity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://sche...

jiuka_的博客 3829

10分钟快速搭建OpenClaw(基于Windows+飞书)

OpenClaw 是一款功能强大的 AI 智能体工具,能够帮助用户管理邮件、日历等日常事务。本文详细介绍了在 Windows11 系统上安装和配置 OpenClaw 的完整步骤,包括 Node.js 环境搭建、Git 安装、OpenClaw 部署以及飞书机器人创建与对接。通过简单的命令行操作和可视化界面配置,用户可以快速完成 AI 助手部署,实现智能办公自动化。文中还提供了飞书机器人权限设置等关键环节的图文指引,帮助用户轻松完成系统集成。

Hello, New World! 2927

【ceph】OSD-基本存储单元

OSD 是 Ceph 的基本存储单元,负责对象的存储、检索和数据副本的管理。每个 OSD 进程通常对应于存储集群中的一个物理或虚拟存储设备(如硬盘或 SSD)。OSD 是 Ceph 的关键组成部分,负责对象的存储、管理和复制。通过多个 OSD 共同协作,Ceph 能够提供高可用性、可扩展性和容错能力,适用于各种存储需求。

qq_42853133的博客 1998

安卓实战之登录界面设计

安卓实战之登录界面设计 运行环境: windows10+ Android Studio2.3.3 +API 21 (适用android 5.0以上版本的手机) (1)知识储备 (知识储备链接:https://blog.youkuaiyun.com/biggerchong/article/details/83015407) Activity:表示当前手机的整个界面(一页)             ...

知飞翀的博客 1万+

【网络基础2】路由器的 “两扇门”:二层接口和三层接口到底有啥不一样?

家里的路由器背后总有几个网线接口,有的标着 “LAN”,有的标着 “WAN”;公司机房的路由器上,接口更是五花八门,有的插着网线,有的连着光纤,旁边还贴着 “GE0/0/1”“Eth-Trunk1” 这样的标签。你可能会想:不就是插网线的地方吗?有啥区别?其实,这些接口分 “二层接口” 和 “三层接口”,它们的作用差得远了 —— 就像你家的门,有的是 “小区内的单元门”(只通小区内部),有的是 “小区的大门”(能通往外面的世界)。接下来,咱们用大白话 + 生活例子,一点点把这两种接口讲透。

jundao1997的专栏 566
上一篇: Android基础控件
下一篇: SQLite基础知识
ReScale
博客等级 码龄9年 10粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值