登录界面设计

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

华为EC6108V9E刷机实战:从U盘准备到开机优化的完整避坑指南

本文提供华为悦盒EC6108V9E刷机与优化的完整实战指南。针对搭载RK3228芯片和安卓4.4.4系统的设备,从型号确认、固件选择、U盘准备,到详细刷机步骤、常见故障排除,以及刷机后的深度性能优化,手把手帮助用户规避风险,让旧盒子焕发新生,成为流畅的全能媒体中心。

weixin_29324401的博客 1194

Flink SQL数据血缘实战:如何用Calcite追踪字段级数据流向(附源码示例)

本文深入探讨了如何利用Apache Calcite解析Flink SQL执行计划,实现字段级数据血缘的追踪。通过扩展Calcite的元数据处理器,特别是针对Flink特有的Snapshot等节点,文章提供了从获取优化后的逻辑计划到提取并可视化血缘关系的完整实战方案,并附有核心源码示例,帮助开发者构建实时数仓的数据治理能力。

weixin_29032337的博客 142

Matlab GUI登录界面设计

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

gitblog_06784的博客 413

脑电时频分析I:谱分析

1、EEG频带划分 自发的EEG活动在活体大脑中持续存在,通常通过频率进行分类(也叫神经振荡活动) 特定频段的脑活动,即节律性的活动,具有特定的头皮分布和生物学意义 最后还有一个γ波,主要是指30hz~100hz的一个波段,通常这个波段也包含了噪声唁电的成分,比较难提取处理,比较少用到这个波段 这个波段主要是有可能躯体感觉皮层,进行一个多通道的感觉输入的i信号处理,比如我们同时处理视觉和听觉信号的处理,而且γ波与我们记忆的形成有关 除此之外,还有一个特殊的波段,8~12hz的Mu波段主要是特指我们

Kobe123brant的博客 1万+

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

Allegro老鸟的20年效率秘籍:用YepEda Skill脚本实现PCB设计全流程自动化

本文分享了Allegro资深工程师20年效率秘籍,通过YepEda Skill脚本实现PCB设计全流程自动化。从封装建库到规则配置,再到DFM审核,YepEda Skill大幅提升设计效率,每天节省至少4小时重复劳动。文章详细解析了自动化工具链的核心功能,并提供了实战技巧和量化对比数据。

weixin_42546392的博客 239

基于电能质量治理的场景实例:统一电能质量调节器(UPQC)与并网逆变器集成

本文通过Simulink平台,详细演示了统一电能质量调节器(UPQC)与并网逆变器的集成系统建模与仿真过程。主要内容包括:1)系统架构设计,包含光伏并网系统、非线性负载和电压扰动源;2)UPQC主电路设计,包括串联/并联单元拓扑和控制策略实现;3)与并网逆变器的能量交互与协同控制逻辑;4)典型电能质量问题的仿真测试场景。结果表明,该集成系统能有效治理电压暂降(维持负载电压380V±2%)和电流谐波(电网THD<3%),直流母线电压稳定在800V±5V。该系统为应对复杂电能质量问题提供了"电压

xiaoheshang_123的博客 310

安卓实战之登录界面设计

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

知飞翀的博客 1万+

Python中的join函数的用法

从语法、实例、应用三方面详尽地介绍join函数

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值