我的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(); } }
效果我就不去演示了,有兴趣自己去试试吧