Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

AlertDialog以及子类

$
0
0

android.app.AlertDialog及其子类提供了4种常用的对话框:
AlertDialog:功能最丰富,实际应用最广的对话框,最常用的。
ProgressDialog:进度对话框,这个对话框只是对简单进度条的封装
DatePickerDialog:日期选择对话框,这个对话框只是对DatePicker的包装
TimePickerDialog:时间选择对话框,这个对话框只是对TimePicker的包装

——AlertDialog
功能很强大,可以生成各种内容的对话框
AlertDialog生成对话框可分为如下4个区域:
——图标区
——标题区
——内容区
——按钮区
AlterDialog使用步骤:
(1)创建AlertDialog.Builder对象
(2)调用AlertDialog.Builder的setTitle()或setCustomTitle()方法设置标题
(3)调用AlertDialog.Builder的setIcon()方法设置图标
(4)调用AlertDialog.Builder相关方法设置显示内容,
包括:setMessage 设置最简单的文本提示信息
setItems 设置内容为简单列表项,调用该方法时需要传入一个数组或者数组资源的资源ID
setSingleChoiceItems 设置内容为单选的列表项,可以传入数组,资源id,Cursor,ListAdapter作为参数
setMultiChoiceItems 设置内容为多选的列表项
setAdapter 设置内容为自定义列表项
setView 设置内容为任意类型的View,完成一个登录对话框的界面
(5)调用AlertDialog.Builder的setPositiveButton(),setNegativeButton
或setNeutralButton()方法添加多个按钮
(6)调用AlertDialog.Builder的create()方法创建AlterDialog对象
(7)调用AlertDialog的show()方法显示对话框
setCancelable(false):设置是否可以取消对话框,默认为true,点击按钮,回退健或者点击
任何一个地方都会关闭对话框。需要在create之前调用。
AlertDialog.dismiss():取消对话框
AlertDialog.cancel():取消对话框
修改Activity的背景颜色:
getWindow().setBackgroundDrawableResource(int);
修改Activity的背景图片:
getWindow().setBackgroundDrawable(Drawable);

——DatePickerDialog,TimePickerDialog
这两个对话框功能简单,用法也很简单。只需要两步就可以了:
1)通过new关键字创建实例,调用show()将对话框显示出来
2)绑定监听器,从而通过监听器获取用户设置的事件

——ProgressDialog
使用ProgressDialog进度条对话框有两种方式:
1)如果只是创建一个简单的进度对话框,
调用ProgressDialog提供的静态show()方法显示对话框即可
这里的参数boolean indeterminate设置是否是不明确的状态。
2)创建ProgressDialog,然后调用方法对对话框中的进度条进行设置,
设置完成后将对话框显示出来即可。
ProgressDialog包含如下的方法:

a)setTitle(“提示信息”);
b)setMessage(charSequence)设置对话框里显示的消息
c)setMax(int)设置对话框中进度条的最大值
d)setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)设置对话框里进度条的风格
e)setIndeterminate(boolean)设置进度条是否显示不明确值,不明确就是滚动条的当前值自动在最小到最大值之间来回移动,形成这样一个动画效果,这个只是告诉别人“我正在工作”,但不能提示工作进度到哪个阶段。主要是在进行一些无法确定操作时间的任务时作为提示。而“明确”就是根据你的进度可以设置现在的进度值
f)p.dismiss()关闭对话框

package com.xspacing.alertdialog;

import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.ProgressDialog;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TimePicker;
import android.widget.Toast;

/**
 * @ClassName MainActivity.java
 * @Description TODO 对话框
 * @author Smile
 * @version v1.0
 * @date 2016年9月27日
 */
public class MainActivity extends Activity implements View.OnClickListener {

    private Button mBtnAlertDialog;
    private Button mOneBtnAlertDialog;
    private Button mCustomAlertDialog;
    private Button mDateAlertDialog;
    private Button mTimeAlertDialog;
    private Button mMultiAlertDialog;
    private Button mProgressAlertDialog;
    private Map<String, String> map;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initViews();
        initDatas();
    }

    private void initViews() {
        mBtnAlertDialog = (Button) findViewById(R.id.bt_alertdialog);
        mOneBtnAlertDialog = (Button) findViewById(R.id.bt_one_alertdialog);
        mMultiAlertDialog = (Button) findViewById(R.id.bt_multi_alertdialog);
        mCustomAlertDialog = (Button) findViewById(R.id.bt_custom_alertdialog);
        mDateAlertDialog = (Button) findViewById(R.id.bt_date_alertdialog);
        mTimeAlertDialog = (Button) findViewById(R.id.bt_time_alertdialog);
        mProgressAlertDialog = (Button) findViewById(R.id.bt_progress_alertdialog);
    }

    private void initDatas() {
        mBtnAlertDialog.setOnClickListener(this);
        mOneBtnAlertDialog.setOnClickListener(this);
        mMultiAlertDialog.setOnClickListener(this);
        mCustomAlertDialog.setOnClickListener(this);
        mDateAlertDialog.setOnClickListener(this);
        mTimeAlertDialog.setOnClickListener(this);
        mProgressAlertDialog.setOnClickListener(this);
    }

    /**
     * 普通对话框
     */
    private void alertDialog() {
        // context必须为activity的上下文,不可为getApplicationContext()
        AlertDialog.Builder builder = new Builder(this);
        builder.setIcon(R.drawable.ic_launcher);
        builder.setCancelable(false); // 点击对话框意外区域,包括返回按钮,对话框都不会退出
        builder.setTitle("标题");
        builder.setMessage("是否退出");
        builder.setNegativeButton("取消", new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        builder.setPositiveButton("确定", new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                System.exit(0);
            }
        });
        builder.create().show();
    }

    /**
     * 单选对话框
     */
    private void oneAlertDialog() {
        AlertDialog.Builder builder = new Builder(this);
        builder.setIcon(R.drawable.ic_launcher);
        builder.setTitle("请选择性别");
        final String[] str = new String[] { "男", "女" };
        builder.setSingleChoiceItems(str, 1, new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                Toast.makeText(getApplicationContext(), str[which], 0).show();
            }
        });

        builder.create().show();
    }

    /**
     * 多选对话框
     */
    private void multiAlertDialog() {
        AlertDialog.Builder builder = new Builder(this);
        builder.setIcon(R.drawable.ic_launcher);
        builder.setTitle("请选择喜欢的水果");
        map = new HashMap<String, String>();
        final String[] items = { "香蕉", "苹果", "雪梨", "火龙果", "水蜜桃" };
        boolean[] checkedItems = { true, false, false, false, false };
        //将为true的水果放进map中
        for (int i = 0; i < checkedItems.length; i++) {
            if (checkedItems[i]) {
                map.put(items[i], items[i]);
            }
        }
        builder.setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                if (isChecked) {
                    map.put(items[which], items[which]);
                    Toast.makeText(getApplicationContext(), "你选择了" + items[which], 0).show();
                } else {
                    map.remove(items[which]);
                    Toast.makeText(getApplicationContext(), "你取消了" + items[which], 0).show();
                }
            }

        });

        builder.setPositiveButton("确定", new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                Set<String> keySet = map.keySet();
                String string = "";
                Iterator<String> iterator = keySet.iterator();
                while (iterator.hasNext()) {
                    string += map.get(iterator.next());
                }
                Toast.makeText(getApplicationContext(), "你选择了" + string, 0).show();
            }
        });
        builder.setNegativeButton("取消", new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(getApplicationContext(), "你取消了选择对话框", 0).show();
            }
        });

        builder.show();
    }

    /**
     * 自定义对话框
     */
    private void customAlertDialog() {
        AlertDialog.Builder builder = new Builder(this);
        View view = getLayoutInflater().inflate(R.layout.custom_dialog_view, null, false);
        builder.setView(view);
        Button btnAffirm = (Button) view.findViewById(R.id.bt_affirm);
        Button btnCancel = (Button) view.findViewById(R.id.bt_cancel);
        btnAffirm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(), "确认", 0).show();
            }
        });
        btnCancel.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(), "取消", 0).show();
            }
        });
        builder.create().show();
    }

    /**
     * 日期选择器
     */
    private void dateAlertDialog() {
        // 当前日期
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        int monthOfYear = calendar.get(Calendar.MONTH);
        int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
        DatePickerDialog dialog = new DatePickerDialog(this, new OnDateSetListener() {

            // monthOfYear月份要加多一个1
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                Toast.makeText(getApplicationContext(), year + "年" + (monthOfYear + 1) + "月" + dayOfMonth + "日", 0)
                        .show();
            }
        }, year, monthOfYear, dayOfMonth);
        dialog.show();
    }

    /**
     * 时间选择器
     */
    private void timeAlertDialog() {
        // 当前时间
        Calendar calendar = Calendar.getInstance();
        int hourOfDay = calendar.get(Calendar.HOUR_OF_DAY);
        int minute = calendar.get(Calendar.MINUTE);
        boolean is24HourView = true;
        TimePickerDialog dialog = new TimePickerDialog(this, new OnTimeSetListener() {

            @Override
            public void onTimeSet(final TimePicker view, final int hourOfDay, final int minute) {
                Toast.makeText(getApplicationContext(), hourOfDay + "时" + minute + "分", 0).show();
            }
        }, hourOfDay, minute, is24HourView);
        dialog.show();
    }

    /**
     * 加载对话框
     */
    private void progressAlertDialog() {
        ProgressDialog dialog = new ProgressDialog(this);
        // dialog.setTitle("正在拼命加载");
        // dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); //设置进度样式
        // 水平进度条
        dialog.setTitle("正在拼命下载");
        // true:进度条不显示当前进度
        dialog.setIndeterminate(true);
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // 设置进度样式
        dialog.setMax(100);
        // dialog.setProgress(50); //当前进度
        dialog.setMessage("当前的下载进度:50%");
        dialog.show();
    }

    /**
     * 返回按钮监听
     * 
     * @param keyCode
     * @param event
     * @return
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
        case KeyEvent.KEYCODE_BACK:
            alertDialog();
            break;
        default:
            break;
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.bt_alertdialog:
            alertDialog();
            break;
        case R.id.bt_one_alertdialog:
            oneAlertDialog();
            break;
        case R.id.bt_multi_alertdialog:
            multiAlertDialog();
            break;
        case R.id.bt_custom_alertdialog:
            customAlertDialog();
            break;
        case R.id.bt_date_alertdialog:
            dateAlertDialog();
            break;
        case R.id.bt_time_alertdialog:
            timeAlertDialog();
            break;
        case R.id.bt_progress_alertdialog:
            progressAlertDialog();
            break;
        default:
            break;
        }
    }

}

custom_dialog_view.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" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#44ff0000"
        android:gravity="center"
        android:text="设置密码"
        android:textColor="#ffffff" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入用户名" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入密码" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/bt_affirm"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="确定" />

        <Button
            android:id="@+id/bt_cancel"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="取消" />
    </LinearLayout>

</LinearLayout>

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.xspacing.alertdialog.MainActivity" >

    <Button
        android:id="@+id/bt_alertdialog"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="普通对话框" />

    <Button
        android:id="@+id/bt_one_alertdialog"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="单选对话框" />

    <Button
        android:id="@+id/bt_multi_alertdialog"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="多选对话框" />

    <Button
        android:id="@+id/bt_custom_alertdialog"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="自定义对话框" />

    <Button
        android:id="@+id/bt_date_alertdialog"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="日期选择对话框" />

    <Button
        android:id="@+id/bt_time_alertdialog"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="时间选择对话框" />

    <Button
        android:id="@+id/bt_progress_alertdialog"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="加载对话框" />

</LinearLayout>
作者:hellcw 发表于2016/9/28 23:46:53 原文链接
阅读:129 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>