天天看点

Android|Dialog类理论篇(附实现用户登录对话框)

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

理论篇–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对象

(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就可以登录,否则就是登陆失败。

Android|Dialog类理论篇(附实现用户登录对话框)
Android|Dialog类理论篇(附实现用户登录对话框)

制作步骤

创建新项目 My servenApp

Android|Dialog类理论篇(附实现用户登录对话框)

点进Project—>Empty Activity—>然后名字改下,finish即可。成功之后,点击箭头运行程序。

Android|Dialog类理论篇(附实现用户登录对话框)

程序正常可以跑成功hello world字样,下面我们继续

上传资源到drawable

将此图另存为“xx.gif"

Android|Dialog类理论篇(附实现用户登录对话框)

拖到drawable,ok后,我们基础图片有了

Android|Dialog类理论篇(附实现用户登录对话框)

布局主界面activity_main.xml

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

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

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id = "@+id/button1"
        android:text="打开普通对话框"
        android:textSize="24sp"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id = "@+id/button2"
        android:text="打开输入对话框"
        android:textSize="24sp"/>
</LinearLayout>
           
LinearLayout详解

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

Button详解

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

创建空类 搭建次要界面

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

Android|Dialog类理论篇(附实现用户登录对话框)

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

布局对话框界面的xml

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="用户名:"
        android:id="@+id/user"
        android:textSize="18sp"/>
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editText"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="密码:"
        android:id="@+id/textView"
        android:textSize="18sp"/>
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/paswdEdit"/>

</LinearLayout>
           
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的复写思想。然后在第二种用户登录对话框需要创建和显示对话框。我们还做了单击事件也要注意!

点击运行

程序运行点击绿色按钮

测试效果

Android|Dialog类理论篇(附实现用户登录对话框)
Android|Dialog类理论篇(附实现用户登录对话框)

总结

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

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

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

Android|Dialog类理论篇(附实现用户登录对话框)

集成的mainfest默认是MainActivity.java要考虑到哟!