博客
关于我
Android|Dialog类理论篇(附实现用户登录对话框)
阅读量:172 次
发布时间:2019-02-28

本文共 5214 字,大约阅读时间需要 17 分钟。

本博文源于安卓基础对话框的实现。先讲理论后看实践。大家先可以看实践的效果,看到不懂的代码才回头看理论,加深理论的学习。知行合一方能做到知识有的放矢。

理论篇–Dialog类

对话框是提示用户做出决定或输入额外信息的小窗口,对话框不会填充屏幕。对话框是一个有边框和标题栏的、独立存在的容器,再应用程序中经常使用对话框组件来进行人机交互,用于需要用户采取行动才能继续执行的事件。

Android系统提供了丰富的对话框功能。Dialog是所有对话框的基类,AlertDialog是Dialog的直接派生类。

消息对话框

消息对话框(AlertDialog)是应用程序设计中最常用的对话框之一。AlertDialog的内容很丰富,可以放置标题、消息和3个按钮。使用它可以创建普通对话框、带列表的对话框,以及带单选按钮和复选框的对话框。AlertDialog的常用方法如表

方法 说明
AlertDialog.Builder(Context) 对话框Builder对象的构造方法
create() 创建AlertDialog对象
setTitle() 设置对话框标题
setIcon() 设置对话框图标
setMessage() 设置对话框的消息
setItems() 设置对话框要显示的一个列表
setPositiveButton() 在对话框中添加肯定按钮
setNegativeButton() 在对话框中添加否定按钮
show() 显示对话框
dismiss() 关闭对话框

创建AlertDialog对象需要使用AlertDialog的内部类Builder,设计AlertDialog的步骤如下。

(1)用AlertDialog.Builder类创建对话框Builder对象

Builder dialog = new AlertDialog.Builder(Context);

(2)设置对话框的标题、图标、提示信息内容、按钮等

dialog.setTitle("普通对话框")dialog.setIcom(R.drawable.icon1);dialog.setMessage("一个简单的提示对话框");dialog.setPositiveButton("确定",new okClick());

(3)创建并显示AlertDialog对话框对象。

dialog.create();dialog.show();

其他常用对话框

AlertDialog对话框是最重要的对话框,有多种表现形式、包括列表对话框、单选对话框、多选对话框、进度条对话框(ProgressDialog)、时间对话框(DatePickerDialog和TimePickerDIalog)、自定义布局对话框等形式。其中时间对话框带有允许用户选择日期或时间的预定义界面。

进度条对话框

PressDialog类继承于AlertDialog,综合了进度条与对话框的特点,使用起来非常简单。ProgressDialog的常用方法如表所示:

方法 说明
getMax() 获取对话框进度的最大值
getProgress() 获取对话框当前进度值
onStart() 开始调用对话框
setMax(int max) 设置对话框进度的最大值
setMessage(CharSequence message) 设置对话框的消息
setProgress(int vlaue) 设置对话框当前进度
show(COntext context,CharSequence title,CharSequence message) 设置对话框的标题和消息
ProgressDialog(Context context) 对话框的构造方法

应用篇–实现用户登录对话框

测试效果

点击普通对话框,弹出最平常的对话框,点击输入对话框,可以输入对话框,其中对话框的内容可以自由输入。在这里密码只要为admin就可以登录,否则就是登陆失败。

在这里插入图片描述
在这里插入图片描述

制作步骤

创建新项目 My servenApp

在这里插入图片描述

点进Project—>Empty Activity—>然后名字改下,finish即可。成功之后,点击箭头运行程序。
在这里插入图片描述
程序正常可以跑成功hello world字样,下面我们继续

上传资源到drawable

将此图另存为“xx.gif"

在这里插入图片描述
拖到drawable,ok后,我们基础图片有了
在这里插入图片描述

布局主界面activity_main.xml

这个是主界面搭建的源码,下面部分会对他细致讲解

LinearLayout详解

线性布局作为根元素,设置width与height,方向为垂直。

Button详解

两个按钮作为响应事件width与height。id一定要设置,为了变得更加友好。text也要设置,textSize只是为了更美观。

创建空类 搭建次要界面

次要界面就是实现对话框的弹出。这也就是用户登录对话框,后续java代码会对此进行相应事件配置。

在这里插入图片描述

右击app文件夹。箭头操作!将其命名为DialogActivity

布局对话框界面的xml

也就是次界面的布局,主要实现用户登录对话框的界面。

LinearLayout详解

简单的height与width设置,方向设置为垂直

TextView详解

也就是我们看到的用户名和密码这两个显示内容,不可编辑所以TextView。

EditText详解

id一定要设置,方便后面操作!

编辑主界面java代码

也就是两个按钮的代码,用户点击进行相应。

package com.example.myapplication;import android.app.Activity;import android.app.AlertDialog;import android.app.Dialog;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.Toast;public class DialogActivity extends Activity implements View.OnClickListener {       Button btn1,btn2;    LinearLayout login;    @Override    protected void onCreate(Bundle savedInstanceState) {           super.onCreate(savedInstanceState);        setContentView(R.layout.activity_dialog);        btn1 = (Button)findViewById(R.id.button1);        btn2 = (Button)findViewById(R.id.button2);        btn1.setOnClickListener(this);        btn2.setOnClickListener(this);    }    public void onClick(View arg0) {           AlertDialog.Builder dialog = new AlertDialog.Builder(DialogActivity.this);        if(arg0==btn1)        {               dialog.setTitle("警告");            dialog.setIcon(R.drawable.xx);            dialog.setMessage("本项操作可能导致信息泄露!");            dialog.setPositiveButton("确定",new okClick());            dialog.create();            dialog.show();        }        else if(arg0==btn2)        {               login = (LinearLayout)getLayoutInflater().inflate(R.layout.login,null);            dialog.setTitle("用户登录").setMessage("请输入用户名和密码").setView(login);            dialog.setPositiveButton("确定",new loginClick());            dialog.setIcon(R.drawable.xx);            dialog.create();            dialog.show();        }    }    class okClick implements DialogInterface.OnClickListener {           @Override        public void onClick(DialogInterface dialog,int which)        {               dialog.cancel();        }    }    class loginClick implements DialogInterface.OnClickListener{           EditText txt;        @Override        public void onClick(DialogInterface dialog,int which)        {               txt = (EditText)login.findViewById(R.id.paswdEdit);            if((txt.getText().toString()).equals("admin"))                Toast.makeText(getApplicationContext(),"登录成功",Toast.LENGTH_SHORT).show();            else                Toast.makeText(getApplicationContext(),"密码错误",Toast.LENGTH_SHORT).show();             dialog.dismiss();        }    }    class exitClick implements DialogInterface.OnClickListener {           @Override        public void onClick(DialogInterface dialog,int which)        {               DialogActivity.this.finish();        }    }}

主界面代码看起来非常复杂,其实本身内容非常灵清。分为两种。第一种激活控件,将id一一get,这是第一种。第二种就是对用户所点击地进行相应事件的编辑。主要采用java的复写思想。然后在第二种用户登录对话框需要创建和显示对话框。我们还做了单击事件也要注意!

点击运行

程序运行点击绿色按钮

测试效果

在这里插入图片描述

在这里插入图片描述

总结

代码得以运行主要有以下步骤

  • 创建项目,跑成功hello world
  • 上传资源文件到drawable
  • 布局主界面两个按钮
  • 创建空类作为对话框
  • 布局对话框xml文件
  • 配置主界面事件相应的代码
  • 成功运行,收获喜悦!

很高兴博文能帮助到大家!一些文件名的修改也要思考的。如果大家文件名有问题,可以参考博主做这个实验的目录,仅供参考!

在这里插入图片描述
集成的mainfest默认是MainActivity.java要考虑到哟!

转载地址:http://fsrd.baihongyu.com/

你可能感兴趣的文章
LiveGBS user/save 逻辑缺陷漏洞复现(CNVD-2023-72138)
查看>>
localhost:5000在MacOS V12(蒙特利)中不可用
查看>>
logstash mysql 准实时同步到 elasticsearch
查看>>
Luogu2973:[USACO10HOL]赶小猪
查看>>
mabatis 中出现< 以及> 代表什么意思?
查看>>
Mac book pro打开docker出现The data couldn’t be read because it is missing
查看>>
MAC M1大数据0-1成神篇-25 hadoop高可用搭建
查看>>
mac mysql 进程_Mac平台下启动MySQL到完全终止MySQL----终端八步走
查看>>
Mac OS 12.0.1 如何安装柯美287打印机驱动,刷卡打印
查看>>
MangoDB4.0版本的安装与配置
查看>>
Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
查看>>
mapping文件目录生成修改
查看>>
MapReduce程序依赖的jar包
查看>>
mariadb multi-source replication(mariadb多主复制)
查看>>
MariaDB的简单使用
查看>>
MaterialForm对tab页进行隐藏
查看>>
Member var and Static var.
查看>>
memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
查看>>
memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
查看>>
Memcached:Node.js 高性能缓存解决方案
查看>>