我的android 第4天 - Dialog

我的android 第4天 - Dialog

DialogAndroid一种消息提示机制,但需要用户进行确认,比如删除文件提示等,针对手机特点,对话框不易过多

常见对话框

一、标准对话框

二、菜单式对话框

三、复选对话框

四、文本输入对话框

 

1、标准对话框实现

•初始化对话框构建器

  AlertDialog.Builder builder = new AlertDialog.Builder(this);

•设置对话框标题

 builder.setTitle("提示");

•设置对话框图标

 builder.setIcon(android.R.drawable.stat_sys_warning);

•设置提示信息
•builder.setMessage("是否要退出?");
•设置积极按钮(左边按钮)、消极按钮(右边按钮)

         builder.setPositiveButton(R.string.yes, null);

         builder.setNegativeButton(R.string.no, null);

•创建及显示对话框
•AlertDialog dialog = builder.create();
•dialog.show()

2、单选对话框实现

•buider.setSingleChoiceItems(items, checkedItem, listener)
•items:单选项  字符串数组
•checkedItem 默认选项
•listener监听

   3、复选对话框实现

•setMultiChoiceItems(items, checkedItems, listener)
•items:复选项字符串数组
•checkedItems 默认选择项boolean数组
•Listener监听

 4、文本输入对话框

•setView() 设置要显示自定义的view视图
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"
    android:gravity="center_horizontal"
    android:id="@+id/dialog_layout" >

    <Button
        android:id="@+id/normal_dialog_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="标准对话框"
        android:layout_marginTop="20dp" />
    <Button
        android:id="@+id/menu_dialog_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="菜单式对话框"
        android:layout_marginTop="20dp" />
    
    <Button
        android:id="@+id/mul_dialog_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="复选对话框"
        android:layout_marginTop="20dp" />
    
     <Button
        android:id="@+id/diy_dialog_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="自定义对话框"
        android:layout_marginTop="20dp" />
    

</LinearLayout>

<?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="horizontal"
    android:background="@drawable/bg_yellow" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#00ff00"
        android:text="你的籍贯" 
        android:background="@android:color/darker_gray"
        />

    <EditText
        android:id="@+id/from_edt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:ems="10" >

        <requestFocus />
    </EditText>

</LinearLayout>
java代码
package cn.itcast.dialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;

public class DialogActivity extends Activity implements OnClickListener {
	Context context;// 上下文对象

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_dialog);
		context = this;
//		Button button = (Button) findViewById(R.id.normal_dialog_btn);
//		// 添加标准对话框按钮
//		button.setOnClickListener(this);
//		button = (Button) findViewById(R.id.menu_dialog_btn);
//		// 添加的菜单式的对话框按钮
//		button.setOnClickListener(this);
//		button = (Button) findViewById(R.id.mul_dialog_btn);
//		// 添加复选对话框按钮
//		button.setOnClickListener(this);
		//通过ViewGroup获取子控件来绑定监听
		LinearLayout layout=(LinearLayout) findViewById(R.id.dialog_layout);
		//for循环,必须这样写,达到优化的目的
		int childCount=layout.getChildCount();
		for(int i=0;i<childCount;i++){
			View view=layout.getChildAt(i);
			//对view添加监听
			view.setOnClickListener(this);
		}

	}

	// 构建一个监听器,成员变量
	DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
		public void onClick(DialogInterface dialog, int which) {
			switch (which) {
			case -1:
				Toast.makeText(context, "你按下左边按钮", Toast.LENGTH_SHORT).show();
				break;
			case -2:
				Toast.makeText(context, "你按下右边按钮", Toast.LENGTH_SHORT).show();
			default:
				break;
			}

		}

	};

	@Override
	public void onClick(View v) {
		//显示对话框
		showDialog(v.getId());

//		switch (v.getId()) {
//		case R.id.normal_dialog_btn:
//			//系统提供的一个显示对话框的方法
//			showDialog(0);
//			//normalDialog();
//			break;
//		case R.id.menu_dialog_btn:
//			showDialog(1);
//			//menuDialog();
//			break;
//		case R.id.mul_dialog_btn:
//			showDialog(2);
//			//mulDialog();
//			break;
//
//		default:
//			break;
//		}

	}
	@Override
	protected Dialog onCreateDialog(int id) {
		AlertDialog dialog=null;
		switch (id) {
		case R.id.normal_dialog_btn:
			AlertDialog.Builder builder = new AlertDialog.Builder(context);
			// 设置对话框的图标
			builder.setIcon(R.drawable.ic_bomb);
			// 设置对话框的标题
			builder.setTitle("标准对话框");
			// 设置对话框的提示内容
			builder.setMessage("你真的不理我了吗");
			// 积极的按钮 放在左边
			builder.setPositiveButton(R.string.confirm, listener);
			// 消极的按钮,放在右边
			builder.setNegativeButton(R.string.cancel, listener);
			// 通过构建器创建对话框
			dialog = builder.create();
			break;
		case R.id.menu_dialog_btn:
			final String[] option = getResources().getStringArray(R.array.weather);
			dialog=new AlertDialog.Builder(context)
			.setIcon(R.drawable.ic_weather).setTitle("菜单式对话框")
					.setItems(option, new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							Toast.makeText(context, option[which],
									Toast.LENGTH_SHORT).show();
						}
					}).create();
			
			break;
		case R.id.mul_dialog_btn:
			final String[] items = getResources().getStringArray(R.array.food);
			dialog=new AlertDialog.Builder(context)
			.setIcon(R.drawable.ic_berry)
			.setTitle("你喜欢的食物")
			.setMultiChoiceItems(items, null, new OnMultiChoiceClickListener() {
				@Override
				public void onClick(DialogInterface dialog, int which, boolean isChecked) {
					Toast.makeText(context,items[which]+isChecked, Toast.LENGTH_SHORT).show();		
				}
			})
			.setPositiveButton(R.string.confirm, listener)
			.setNegativeButton(R.string.cancel, listener)
			.create();
			break;
		case R.id.diy_dialog_btn:
			//通过LayoutInflater初始化xml文件转换为View对象
			View view=LayoutInflater.from(context).inflate(R.layout.diy_dialog, null);
			//
			final EditText from=(EditText)view.findViewById(R.id.from_edt);
			dialog=new AlertDialog.Builder(context)
			.setIcon(R.drawable.ic_berry)
			.setTitle("请输入你的籍贯")
			.setView(view)
			.setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() {
				
				@Override
				public void onClick(DialogInterface dialog, int which) {
					Toast.makeText(context,from.getText().toString(), Toast.LENGTH_SHORT).show();		
					
				}
			})
			.setNegativeButton(R.string.cancel, listener)
			.create();
			
			break;

		default:
			break;
		}
		System.out.println("dialog对象通过缓存"+dialog);
		return dialog;
	}
   /**
    * 复选对话框实现
    */
	private void mulDialog() {
		final String[] items = getResources().getStringArray(R.array.food);
		AlertDialog.Builder builder = new AlertDialog.Builder(context);
		//链式编程
		builder.setIcon(R.drawable.ic_berry)
		.setTitle("你喜欢的食物")
		.setMultiChoiceItems(items, null, new OnMultiChoiceClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which, boolean isChecked) {
				Toast.makeText(context,items[which]+isChecked, Toast.LENGTH_SHORT).show();		
			}
		})
		.setPositiveButton(R.string.confirm, listener)
		.setNegativeButton(R.string.cancel, listener)
		.create().show();
		
		
	}

	/**
	 * 菜单式对话框的显示方法
	 */
	private void menuDialog() {
		final String[] option = getResources().getStringArray(R.array.weather);
		AlertDialog.Builder builder = new AlertDialog.Builder(context);
		//链式编程
		builder.setIcon(R.drawable.ic_weather).setTitle("菜单式对话框")
				.setItems(option, new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						Toast.makeText(context, option[which],
								Toast.LENGTH_SHORT).show();
					}
				}).create().show();
	}

	/*
	 * 标准对话框的实现方法
	 */
	private void normalDialog() {
		// 初始化对话框的构建器
		AlertDialog.Builder builder = new AlertDialog.Builder(context);
		// 设置对话框的图标
		builder.setIcon(R.drawable.ic_bomb);
		// 设置对话框的标题
		builder.setTitle("标准对话框");
		// 设置对话框的提示内容
		builder.setMessage("你真的不理我了吗");
		// 积极的按钮 放在左边
		builder.setPositiveButton(R.string.confirm, listener);
		// 消极的按钮,放在右边
		builder.setNegativeButton(R.string.cancel, listener);
		// 通过构建器创建对话框
		AlertDialog dialog = builder.create();
		// 显示对话框
//		System.out.println("dialog对象"+dialog.toString());
		dialog.show();
	}

}

效果我就不去演示了,有兴趣自己去试试吧

猜你喜欢

转载自htmlunit26.iteye.com/blog/1974470