Android对话框使用方法详解

对话框(Dialog)是Android系统在Activity或者其他组件运行过程中提供的一种提示机制。它可以帮助应用完成一些必要的提示功能,同时提供一些与用户交互的功能。

对话框分为很多种,下面将一一介绍。

1.提示对话框

Android系统提供的对话框父类为Dialog, 里面并没有实现对话框的具体类型,比如单选、多选、列表等对话框,仅提供一个框架和规范。系统为开发者提供了一个 多功能的对话框类AlertDialog, 里面封装了各种对话框的样式,开发者只须提供相应的显示数据和按键的响应监听就可以。

提示对话框所使用的就是系统封装好的对话框AlertDialog的实例对象。AlertDialog并不提供对外的构造方法,即不能直接通过AlertDialog的构造函数来生产一个AlertDialog。因为AlertDialog所有的构造方法都是protected的。所以为了获取AlertDialog对象,系统提供了一个静态内部类Builder让我们使用,通过Builder可以创建AlertDialog对象。

(1)创建AlertDialog.Builder实例对象。

(2)通过Builder对象设置对话框的属性。

  • setTitle()设置标题
  • setIcon ()设置图标
  • setMessage ()设置要显示的内容
  • setItems设置在对话框中显示的项目列表
  • setView设置自定义的对话框样式
  • setPositiveButton ()设置确定按钮
  • setNegativeButton ()设置取消按钮
  • setNeutralButton ()设置中立按钮
  • setSingleChoiceItems单选框
  • setMultiChoiceItems复选框

(3)调用Builder对象的create()方法创建AlertDialog对话框

(4)调用AlertDialog的show()方法来显示对话框

(5)调用AlertDialog的dimiss()方法销毁对话框。

package com.example.learndialog;

import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button bt= (Button) findViewById(R.id.button);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog aldg;
                AlertDialog.Builder adBd=new AlertDialog.Builder(MainActivity.this);
                adBd.setTitle("我的提示框");
                adBd.setIcon(R.drawable.p1);
                adBd.setMessage("确定要关闭本应用程序吗?");
                adBd.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }
                });
                adBd.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });
                aldg=adBd.create();
                aldg.show();
            }
        });
    }
}

运行结果:

2.单选对话框

单选对话框中的0代表默认选中第一个。

package com.example.learndialog;

import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    int picWhich;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button bt = (Button) findViewById(R.id.button);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String[] starr = new String[]{"教师", "经理", "律师", "公务员"};
                AlertDialog adlg;
                adlg = new AlertDialog.Builder(MainActivity.this).setTitle("选择职业:")
                        .setSingleChoiceItems(starr, 0, new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                picWhich = which;
                            }
                        })
                        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                Toast.makeText(MainActivity.this, "你选定的职业是:"
                                        + starr[picWhich], Toast.LENGTH_LONG).show();
                            }
                        })
                        .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        })
                        .create();
                adlg.show();
            }
        });
    }
}

运行结果:

3.复选对话框

复选对话框和单选对话框用法相似。

package com.example.learndialog;

import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    int picWhich;
    boolean chk[]=new boolean[]{false,false,false,false};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button bt = (Button) findViewById(R.id.button);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String[] starr = new String[]{"教师", "经理", "律师", "公务员"};
                AlertDialog adlg;
                adlg = new AlertDialog.Builder(MainActivity.this).setTitle("选择职业:")
                        .setMultiChoiceItems(starr, chk, new DialogInterface.OnMultiChoiceClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                                chk[which]=isChecked;
                            }
                        })
                        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                String st=" ";
                                for (int i=0;i<chk.length;i++)
                                    if (chk[i])
                                        st=st+starr[i]+" ";
                                Toast.makeText(MainActivity.this,"选定的职业有:"+st,Toast.LENGTH_LONG).show();
                            }
                        })
                        .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        })
                        .create();
                adlg.show();
            }
        });
    }
}

运行结果:

4.列表对话框

列表对话框和单选对话框用法相似。

package com.example.learndialog;

import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button bt = (Button) findViewById(R.id.button);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String[] starr = new String[]{"教师", "经理", "律师", "公务员"};
                AlertDialog adlg;
                adlg=new AlertDialog.Builder(MainActivity.this).setTitle("列表对话框")
                        .setItems(starr, new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        })
                        .create();
                adlg.show();
            }
        });
    }
}

运行结果:

5.进度条对话框

ProgressDialog 也是继承于Dialog,但其扩展了缓冲加载提示的功能,为人机之间提供了良好的交互体验。

package com.example.learndialog;

import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void progress_circle(View v){
        final ProgressDialog prdg1=new ProgressDialog(MainActivity.this);
        prdg1.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        prdg1.setTitle("圆形进度条对话框");
        prdg1.setMessage("正在下载");
        prdg1.setMax(100);
        prdg1.show();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(5000);
                    prdg1.cancel();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
    public void progress_horizontal(View v){
        final ProgressDialog prdg2 = new ProgressDialog(this);
        prdg2.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        prdg2.setCancelable(true);
        prdg2.setTitle("水平进度条对话框");
        prdg2.setMax(100);
        prdg2.setButton(DialogInterface.BUTTON_POSITIVE, "确定",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                });
        prdg2.setButton(DialogInterface.BUTTON_NEGATIVE, "取消",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                });
        prdg2.setMessage("正在下载");
        prdg2.show();
        new Thread(new Runnable() {
            @Override
            public void run() {
                int i = 0;
                while (i < 100) {
                    try {
                        Thread.sleep(100);
                        prdg2.incrementProgressBy(1);
                        i++;
                    } catch (Exception e) {
                    }
                }
                prdg2.dismiss();
            }
        }).start();
    }

}

运行结果:

6.拖动对话框

package com.example.learndialog;

import android.app.Dialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.SeekBar;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void SeekOnClick(View v){
        Dialog myDlg=new Dialog(MainActivity.this);
        myDlg.setTitle("拖动对话框:亮度调节");
        myDlg.setContentView(R.layout.seekbardlg);
        SeekBar sb=(SeekBar)myDlg.findViewById(R.id.seekBar);
        final TextView tv=(TextView)myDlg.findViewById(R.id.textView);
        sb.setMax(100);
        sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                tv.setText("当前亮度为:"+progress);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });
        myDlg.show();
    }
}

运行结果:

7.日期选择对话框

package com.example.datepickerdialog;

import android.app.DatePickerDialog;
import android.icu.util.Calendar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.DatePicker;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Calendar c=Calendar.getInstance();
        DatePickerDialog dpd=new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int day) {
                String st;
                st = String.valueOf(year) + "-" + String.valueOf(month) + "-" + String.valueOf(day);
                Toast.makeText(getApplicationContext(), st, Toast.LENGTH_LONG).show();
            }

        },c.get(Calendar.YEAR),c.get(Calendar.MONTH),c.get(Calendar.DAY_OF_MONTH));
        dpd.show();
    }
}

运行结果:

8.时间选择对话框

package com.example.datepickerdialog;

import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.icu.util.Calendar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.DatePicker;
import android.widget.TimePicker;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       Calendar calendar=Calendar.getInstance();
        new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
            @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

            }
        },
                calendar.get(Calendar.HOUR_OF_DAY),
                calendar.get(Calendar.MINUTE),
                true
        ).show();

    }
}

运行结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 五分了解Android Progress Bar进度条加载

    目录 1.前言 2.ProgressBar 3.SeekBar 4.结尾 1.前言 最近在开发中,同事对于android.widget下的控件一知半解,又恰好那天用到了Seekbar,想了想,那就从Seekbar's father ProgressBar 来说说android.widget下的常用控件和常用用法吧.后面也会根据这些控件来进行仿写.扩展,做一些高度自定义的View啦.如果写的不好,或者有错误之处,恳请在评论.私信.邮箱指出,万分感谢 2.ProgressBar A user int

  • Android入门之利用Spinner实现弹出选择对话框

    目录 介绍 项目结构 前端代码 activity_main.xml item_spin_guns.xml 后端代码 GunBean.java GenericAdapter.java MainActivity.java 介绍 Spinner是一种点一下后供用户可以上下选择用的组件. 我们直接来看一个例子说明这个组件是做什么用的. 我们放大点看 我们这次的课程目标就是实现这样的一种点一下然后弹出选择框的样式. 项目结构 随着前几章对Adapter知识的牢固掌握,我们可以看到,这个例子依旧使用的是Ad

  • Android开发基础使用ProgressBar加载进度条示例

    目录 前言 使用方法 总结 前言 之前我们用过WebView类,打开网页时就会出现加载网页的情况,为了让我们直观的感受到网页加载到什么程度而不是白白干等着空白页,于是加载进度条就是一个很好的展示方式,而通常情况下,当我们的数据未加载完成时就会去使用进度条,而ProgressBar就是用于界面上显示进度条的,下面让我们看看这个控件的使用方法. 使用方法 首先我们将ProgressBar控件加到布局中: <?xml version="1.0" encoding="utf-8

  • android实现简单进度条ProgressBar效果

    本文实例为大家分享了android实现简单进度条ProgressBar的具体代码,供大家参考,具体内容如下 记录一下今天学习的进度条ProgressBar 1.在布局文件中添加ProgressBar <ProgressBar         android:id="@+id/progressbar"         android:layout_width="match_parent"         android:layout_height="w

  • Android实现简单实用的垂直进度条

    本文实例为大家分享了Android实现简单垂直进度条的具体代码,供大家参考,具体内容如下 代码注释特别清晰,就不多解释了 支持属性: progress_radius     进度条圆角大小 progress_border_enable  进度条是否有边框 progress_gradient_enable 进度条颜色是否渐变 progress_start_color     从上到下进度条开始的渐变色 progress_end_color    从上到下进度条结束的渐变色 progress_sol

  • Android自定义对话框的简单实现

    本文实例为大家分享了Android自定义对话框的具体实现代码,供大家参考,具体内容如下 1.定义对话框的布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent&quo

  • Android自定义View实现进度条动画

    本文实例为大家分享了Android自定义View实现进度条动画的具体代码,供大家参考,具体内容如下 控件效果 原理: 控制代码/ /更新进度值 val mHandler = object : Handler() {         override fun handleMessage(msg: Message?) {             progressView.setCurrentProgress(progress1.toFloat())         }     } //开启动画,更新

  • Android HandlerThread使用方法详解

    Android HandlerThread使用方法详解 HandlerThread 继承自Thread,内部封装了Looper. 首先Handler和HandlerThread的主要区别是:Handler与Activity在同一个线程中,HandlerThread与Activity不在同一个线程,而是别外新的线程中(Handler中不能做耗时的操作). 用法: import android.app.Activity; import android.os.Bundle; import androi

  • Android canvas drawBitmap方法详解及实例

     Android canvas drawBitmap方法详解及实例 之前自己在自定义view,用到canvas.drawBitmap(Bitmap, SrcRect, DesRect, Paint)的时候,对其中的第2和3个参数的含义含糊不清.看源码函数也没理解,然后看了一些其他的博客加上自己的理解,整理如下.首先,我们看一张图片,今天就要绘制这张图片. 然后将图片用红色的线条分成4个部分,如下: 我们自定义一个View,代码如下: public class PoterDuffLoadingVi

  • Android View.onMeasure方法详解及实例

    Android View.onMeasure方法详解及实例 View在屏幕上显示出来要先经过measure(计算)和layout(布局). 1.什么时候调用onMeasure方法? 当控件的父元素正要放置该控件时调用.父元素会问子控件一个问题,"你想要用多大地方啊?",然后传入两个参数--widthMeasureSpec和heightMeasureSpec. 这两个参数指明控件可获得的空间以及关于这个空间描述的元数据. 更好的方法是你传递View的高度和宽度到setMeasuredDi

  • Android Notification 使用方法详解

    Android Notification 使用方法详解 用TaskStackBuilder来获取PendingIntent处理点击跳转到别的Activity,首先是用一般的PendingIntent来进行跳转. mBuilder = new NotificationCompat.Builder(this).setContent(view) .setSmallIcon(R.drawable.icon).setTicker("新资讯") .setWhen(System.currentTim

  • 基于Android RxCache使用方法详解

    前言 我为什么使用这个库? 事实上Android开发中缓存功能的实现选择有很多种,File缓存,SP缓存,或者数据库缓存,当然还有一些简单的库/工具类,比如github上的这个: [ASimpleCache]:a simple cache for android and java 但是都不是很好用(虽然可能学习成本比较低,因为它使用起来相对简单),我可能需要很多的静态常量来作为key存储缓存数据value,并设置缓存的有效期,这可能需要很多Java代码去实现,并且过程繁琐. 如果您使用的网络请求

  • Android IdleHandler使用方法详解

    正文 在Android中,Handler是一个使用的非常频繁的东西,输入事件机制和系统状态,都通过Handler来进行流转,而在Handler中,有一个很少被人提起但是却很有用的东西,那就是IdleHandler,它的源码如下. /** * Callback interface for discovering when a thread is going to block * waiting for more messages. */ public static interface IdleHa

  • Android开发之PopupWindow创建弹窗、对话框的方法详解

    本文实例讲述了Android开发之PopupWindow创建弹窗.对话框的方法.分享给大家供大家参考,具体如下: 简介: PopupWindow 可创建类似对话框风格的窗口 效果: 使用方法: 使用PopupWindow 创建对话框风格的串口秩序如下两步即可: 1. PopupWindow 的构造器创建PopupWindow对象 2. PopupWindow 的showAsDropDown() 将其显示效果设置为下拉显示 3. PopupWindow 的showAtLoacation() 方法将

  • Android Notification使用方法详解

    Android  Notification使用详解 Notification 核心代码(链式调用):适用于Android 4.0以上(不兼容低版本) Notification noti = new Notification.Builder(this) .setContentTitle("标题名称") .setContentText("标题里的内容") .setSmallIcon(R.drawable.new_mail) .setLargeIcon(BitmapFac

  • Android 对话框(Dialog)大全详解及示例代码

    Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog(int), dismissDialog(int)等方法,如果使用这些方法的话,Activity将通过getOwnerActivity()方法返回该Activity管理的对话框(dialog). onCreateDialog(int):当你使用这个回调函数时,Android系统会有效的设置这个Acti

  • Android  Notification使用方法详解

    Android  Notification使用详解 Notification 核心代码(链式调用):适用于Android 4.0以上(不兼容低版本) Notification noti = new Notification.Builder(this) .setContentTitle("标题名称") .setContentText("标题里的内容") .setSmallIcon(R.drawable.new_mail) .setLargeIcon(BitmapFac

随机推荐