我的android 第4天 - Dialog
Dialog是Android一种消息提示机制,但需要用户进行确认,比如删除文件提示等,针对手机特点,对话框不易过多
常见对话框
一、标准对话框
二、菜单式对话框
三、复选对话框
四、文本输入对话框
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();
}
}
效果我就不去演示了,有兴趣自己去试试吧