Android UI系列--对话框(一)(AlertDialog,TimePickerDialog,DatePickerDialog,ProgressDialog)

一.Dialog介绍

dialog就是一个在屏幕上弹出一个可以让用户做出一个选择,或者输入额外的信息的对话框,一个对话框并不会沾满我们整个的屏幕,并且通常用于模型事件当中需要用户做出一个决定后才会继续执行。

Dialog类是dialog对话框的基类,但是我们应该避免直接使用这个类来实例化一个dialog对话框,我们应当使用其子类来得到一个对话框.

Dialog有很多的子类实现,所以我们要定义一个对话框,使用其子类来实例化一个即可,而不要直接使用Dialog这个父类来构造

java.lang.Object
   ?     android.app.Dialog

Known Direct Subclasses(直接子类)
AlertDialog, CharacterPickerDialog, MediaRouteChooserDialog, MediaRouteControllerDialog, Presentation

Known Indirect Subclasses(间接子类)
DatePickerDialog, ProgressDialog, TimePickerDialog

二.AlertDialog

AlertDialog是Dialog的一个直接子类, 我们通常用 AlertDialog.Builder 直接实例化一个对话框对象。

AlertDialog主要包括警告框,单选框,多选框,下拉列表弹出框,自定义弹出框(自己创建一个弹出界面)

界面设计xml文件(main_activity.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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <Button

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="创建对话框"
        android:onClick="click1" />
     <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="创建单选框"
        android:onClick="click2" />
      <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="创建多选框"
        android:onClick="click3"
        />
      <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="创建下拉框/和message不同"
        android:onClick="click4"
        />

         <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="获取用户名和密码"
        android:onClick="click5"
        />

</LinearLayout>

自定义xml界面(dialog.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" >

    <EditText
     android:id="@+id/username"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:hint="请输入用户名"
        />
      <EditText
     android:id="@+id/password"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:hint="请输入密码"
        />

</LinearLayout>

 Java文件代码如下:

package com.wyy.dialog;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.text.style.BulletSpan;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

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

	public void click1(View v){

		AlertDialog.Builder builder=new Builder(this);
		builder.setIcon(TRIM_MEMORY_BACKGROUND);
		builder.setTitle("请选择:");
		builder.setMessage("工作 重要还是生活重要?");

		builder.setPositiveButton("工作", new OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub

				Toast.makeText(MainActivity.this, "工作不是为了更好的生活吗?", 0).show();

			}
		} );

	builder.setNegativeButton("生活", new OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				Toast.makeText(MainActivity.this, "工作可能让你更有存在感", 0).show();

			}
		} );

	builder.setNeutralButton("忽略", new  OnClickListener() {

		@Override
		public void onClick(DialogInterface dialog, int which) {
			// TODO Auto-generated method stub

			Toast.makeText(MainActivity.this, "neutral"+which, 0).show();

		}
	});

          AlertDialog ad=builder.create();
           ad.show();

	}

	public void click2(View v){
		AlertDialog.Builder  builder=new Builder(this);
		builder.setTitle("请选择您的性别");
		final String[] items=new String[]{"男","女","其他"};
		builder.setSingleChoiceItems(items, -1,new OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				Toast.makeText(MainActivity.this,"您选择了"+items[which], 0).show();
				dialog.dismiss();   

		}

		} );
		builder.show();

		}

	public void click3(View v){
		AlertDialog.Builder builder=new Builder(this);
		builder.setTitle("谁是最帅的明星");
 /**
                 * 第一个参数指定我们要显示的一组下拉多选框的数据集合
                 * 第二个参数代表哪几个选项被选择,如果是null,则表示一个都不选择,如果希望指定哪一个多选选项框被选择,
                 * 需要传递一个boolean[]数组进去,其长度要和第一个参数的长度相同,例如 {true, false, false, true};
                 * 第三个参数给每一个多选项绑定一个监听器
                 */
                final String[] items=new String[]{"胡歌","霍建华","李易峰","杨洋"};                 final boolean[] checkedItems=new boolean[]{true,false,true,false};

		builder.setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which, boolean isChecked) {
				// TODO Auto-generated method stub
				checkedItems[which]=isChecked;
							}

		});

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

			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				String text="";
				for(int i=0;i<4;i++){
					text+=checkedItems[i]?items[i]+",":"";
				}

				Toast.makeText(MainActivity.this, text, 0).show();
				dialog.dismiss();
			}

		});

		builder.setNegativeButton("取消", new OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub

			}
		});

		builder.show();

	}

	public void click4(View v){
		AlertDialog.Builder builder=new Builder(this);
		builder.setIcon(R.drawable.ic_launcher);
		builder.setTitle("请选择你喜欢的城市");

		final String[]  items=new String[]{"北京","上海","南京","深圳","南阳"};

		builder.setSingleChoiceItems(items,  -1, new OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub

				Toast.makeText(MainActivity.this, "您选择的城市是:"+items[which], 0).show();

			}
		});

		builder.show();

	}

	public void click5(View v){
		AlertDialog.Builder  builder=new Builder(this);
		builder.setIcon(R.drawable.ic_launcher);
		builder.setTitle("请输入用户名和密码");

		View view=LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null);
		builder.setView(view);

		final EditText username=(EditText) findViewById(R.id.username);
		final EditText password=(EditText) findViewById(R.id.password);

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

			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub

				String a=username.getText().toString().trim();
				String b=password.getText().toString().trim();

				Toast.makeText(MainActivity.this, "用户名:"+a+",密码:"+b, 0).show();

			}
		});

		builder.setNegativeButton("取消", new OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub

			}
		});

		builder.show();

	}
	}

1.对话框1

我们设置了3个action buttons,每一个button都为其绑定了一个 DialogInterface.OnClickListener() 的监听事件,然后在里面通过Toast吐司对话框来弹出一下我们的一些信息,which方法表示的是action button所代表的int值,which=-1就表示点击的是确定按钮,-2表示点击的是取消按钮,-3表示点击的是忽略按钮

2.下拉框

我们设置setItems(CharSequence[] items, DialogInterface.OnClickListener listener) 方法来设置我们的一个下拉列表框。注意:因为下拉列表框或者是下拉多选框这些都是显示在Content中的,所以message和下拉列表框这些是不能够同时存在的

我们也可以给其绑定一个DialogInterface.OnClickListener监听器,当选中一个选项时,对话框就会消失掉。这里的which代表的是下拉列表的每个选项的索引,通过这个我们可以轻松得到用户选中的是哪一个选项。

3.下拉单选框

在弹出下拉单选框时,当我们选中一个选项,对话框是不会消失的,我们需要点击action button才能让对话框消失

4.下拉多选框

设置下拉多选框时使用的是setMultiChoiceItems方法

5.自定义弹出对话框

对于自定义弹出对话框,我们就需要自己指定一个自定义的布局文件。

首先需要写一个xml的布局文件,然后在里面定义我们的布局,我们不需要在布局文件里定义Button按钮,可以通过 AlertDialog.Builder 来设置 action buttons。

通过 View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null); 我们可以将我们的布局文件加载进来,得到一个View对象,然后通过 AlertDialog.Builder 的setView方法来设置我们的自定义弹出框。

 

时间: 2024-08-01 10:09:32

Android UI系列--对话框(一)(AlertDialog,TimePickerDialog,DatePickerDialog,ProgressDialog)的相关文章

【转】Android UI系列-----时间、日期、Toasts和进度条Dialog

原文网址:http://www.cnblogs.com/xiaoluo501395377/p/3421727.html 您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内容有任何疑问, 可以通过评论或发邮件的方式联系我: [email protected] / [email protected] 如果需要转载,请注明出处,谢谢!! 本篇随笔将继续学

Android中弹出对话框,AlertDialog关键代码

写在这里便于以后查看. Android中弹出对话框的关键代码: 1 btn01.setOnClickListener(new OnClickListener() { 2 3 @Override 4 public void onClick(View v) { 5 Toast.makeText(musicActivity.this, "tanchu", 100).show(); 6 //以下是弹出对话框的关键代码, 7 AlertDialog.Builder b = new AlertDi

Android UI组件进阶(2)——仿Windows对话框

Android UI组件进阶(2)--仿Windows对话框 在开始本章前先祝大家中秋节快乐哈,相信很多上班的朋友都是放三天假的哈! 有时间的话回家陪陪父母吧!树欲静而风不止,子欲养而亲不待!岁月不饶人! 好了,道理和祝福语就说到这里了,今天给大家准备的是模仿Windows风格对话框! 效果图: 相信大部分的AlertDialog都是下面这个样子的: 今天给大家讲解的对话框是下面这样的: 对比两种对话框,站在用户的角度,相信你更加钟情于第二种颜色鲜明的对话框 好了下面就开始讲解如何制作模仿win

【转】Android详细的对话框AlertDialog.Builder使用方法

Android详细的对话框AlertDialog.Builder使用方法 我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的朋友都会知道,大部分的平台都只提供了几个最简单的实现,如果我们想实现自己特定需求的对话框,大家可能首先会想到,通过继承等方式,重写我们自己的对话框.当然,这也是不失为一个不错的解决方式,但是一般的情况却是这样,我们重写的对话框,也许只在一个特定的地方会用到,为了这一次的使用,而去创建一个新类,往往有点杀鸡用牛刀的感觉,甚至会对我们的程序增加不必

Android(java)学习笔记197:常见对话框使用AlertDialog.Builder

1.确认取消对话框: AlertDialog.Builder builder = new Builder(this); // 告诉工厂生产什么样的产品 builder.setTitle("友情提醒"); builder.setMessage("若练此功,必先自宫,是否继续?"); builder.setPositiveButton("好的,想好了", new OnClickListener() { @Override public void on

Android详细的对话框AlertDialog.Builder使用方法(转)

我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的朋友都会知道,大部分的平台都只提供了几个最简单的实现,如果我们想实现自己特定需求的对话框,大家可能首先会想到,通过继承等方式,重写我们自己的对话框.当然,这也是不失为一个不错的解决方式,但是一般的情况却是这样,我们重写的对话框,也许只在一个特定的地方会用到,为了这一次的使用,而去创建一个新类,往往有点杀鸡用牛刀的感觉,甚至会对我们的程序增加不必要的复杂性,对于这种情形的对话框有没有更优雅的解决方案呢?     幸运的

Android详细的对话框AlertDialog.Builder使用方法

我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的朋友都会知道,大部分的平台都只提供了几个最简单的实现,如果我们想实现自己特定需求的对话框,大家可能首先会想到,通过继承等方式,重写我们自己的对话框.当然,这也是不失为一个不错的解决方式,但是一般的情况却是这样,我们重写的对话框,也许只在一个特定的地方会用到,为了这一次的使用,而去创建一个新类,往往有点杀鸡用牛刀的感觉,甚至会对我们的程序增加不必要的复杂性,对于这种情形的对话框有没有更优雅的解决方案呢?     幸运的

【Android UI设计】Dialog对话框详解(二)

上一篇我们介绍了Dialog的基本使用方法,[Android UI设计]Dialog对话框详解(一)今天继续介绍,废话不多说,今天主要实现ProgressDialog和透明Dialog两种效果,最后介绍一下github上的一个Dialog动画开源库,里面包含多种动画特效,效果图如下: 一.ProgressDialog基本使用 1.ProgressDialog关键代码 mProgressDialog = new ProgressDialog(MainActivity.this); // 圆形pro

【Android学习笔记】自定义AlertDialog对话框

(1)布局文件: <RelativeLayout 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: