零零碎碎的一些知识点不知道整理到哪里好些,干脆搬上博客,方便查看,也当做监督自己每天都要有所收获吧,整理的过程也算是梳理思路,自己复习起来也舒心一些。就像一个学长说的,要一次钻研一个知识点,一个萝卜一个坑。对于我自己的做法的话,简单的知识点就像列提纲一样过,别浪费过多精力,难的知识点我会细细咀嚼,用自己通熟易懂语言呈现出来,也希望这个过程中形成自己写博客的风格吧。
下面进入正题了,昨天花了不少时间整理了一下各种对话框,这也是app经常要与用户交互所要使用到的。
先呈现效果图:
选择对话框 普通对话框 view组件对话框
列表对话框 单选对话框 复选对话框
自定义布局对话框 退出时弹出对话框
然后就是代码和注释:
package com.lanjie.androiddialogtest; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; 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.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; /** * @author Clark Xu 实现多种Dialog * */ public class MainActivity extends Activity { private Button btn_diaNormal; private Button btn_diaView; private Button btn_diaList; private Button btn_diaSingleChoose; private Button btn_diaMultiChoose; private Button btn_diaCustom; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getView(); setListeners(); } // 养成良好习惯,命名最好易辨识 public void getView() { btn_diaNormal = (Button) findViewById(R.id.btn_diaNormal); btn_diaView = (Button) findViewById(R.id.btn_diaView); btn_diaList = (Button) findViewById(R.id.btn_diaList); btn_diaSingleChoose = (Button) findViewById(R.id.btn_diaSingleChoose); btn_diaMultiChoose = (Button) findViewById(R.id.btn_diaMultiChoose); btn_diaCustom = (Button) findViewById(R.id.btn_diaCustom); } public void setListeners() { Button button[] = { btn_diaNormal, btn_diaView, btn_diaList, btn_diaSingleChoose, btn_diaMultiChoose, btn_diaCustom }; // 创一个事件处理类 ButtonListener bl = new ButtonListener(); for (int i = 0; i < 6; i++) { button[i].setOnClickListener(bl); } } class ButtonListener implements android.view.View.OnClickListener { // 根据按钮上的文字或者id来辨识按的按钮是哪个 @Override public void onClick(View v) { // instanceof的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。 if (v instanceof Button) {// 如果按了的是Button int btnId = v.getId(); switch (btnId) { case R.id.btn_diaNormal: showNormalDia(); break; case R.id.btn_diaView: showViewDia(); break; case R.id.btn_diaList: showListDia(); break; case R.id.btn_diaSingleChoose: showSingleDia(); break; case R.id.btn_diaMultiChoose: showMultiDia(); break; case R.id.btn_diaCustom: showCustomDia(); break; default: break; } } } } // 1.普通对话框(最多有三个按钮) public void showNormalDia() { final AlertDialog.Builder bui_Normal = new AlertDialog.Builder( MainActivity.this); // 标题栏:设图标,设标题 bui_Normal.setIcon(android.R.drawable.btn_star); bui_Normal.setTitle("学习调查"); // 设文本内容 bui_Normal.setMessage("学习android难不难"); // 设按钮 bui_Normal.setPositiveButton("很难", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "学习android很难", Toast.LENGTH_SHORT).show(); } }); bui_Normal.setNeutralButton("一般", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "学习android难度一般", Toast.LENGTH_SHORT).show(); } }); bui_Normal.setNegativeButton("不难", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "学习android不难", Toast.LENGTH_SHORT).show(); } }); // 创建并显示 bui_Normal.create().show(); } // 2.信息内容是一个简单的View类型(比如输入框类型)的对话框 public void showViewDia() { final AlertDialog.Builder bui_View = new AlertDialog.Builder( MainActivity.this); bui_View.setTitle("请输入"); bui_View.setView(new EditText(MainActivity.this)); bui_View.setPositiveButton("确定", null).setNegativeButton("取消", null); bui_View.create().show(); } // 3.列表框 public void showListDia() { final AlertDialog.Builder bui_List = new AlertDialog.Builder( MainActivity.this); bui_List.setIcon(android.R.drawable.ic_dialog_info); bui_List.setTitle("列表框"); bui_List.setItems(new String[] { "Item1", "Item2", "Item3" }, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which) {// which就是哪个按钮的意思 case 0: Toast.makeText(MainActivity.this, "i am Item1", Toast.LENGTH_SHORT).show(); break; case 1: Toast.makeText(MainActivity.this, "i am Item2", Toast.LENGTH_SHORT).show(); break; case 2: Toast.makeText(MainActivity.this, "i am Item3", Toast.LENGTH_SHORT).show(); break; } } }); bui_List.create().show(); } // 4.单选对话框 public void showSingleDia() { final AlertDialog.Builder bui_Single = new AlertDialog.Builder( MainActivity.this); bui_Single.setTitle("单选框"); bui_Single.setIcon(android.R.drawable.ic_dialog_info); bui_Single.setSingleChoiceItems(new String[] { "Item1", "Item2", "Item3" }, 0, new OnClickListener() {// 第二个参数是初始值(初始被选中的item) @Override public void onClick(DialogInterface dialog, int which) { switch (which) {// which就是哪个按钮的意思 case 0: Toast.makeText(MainActivity.this, "i am Item1", Toast.LENGTH_SHORT).show(); break; case 1: Toast.makeText(MainActivity.this, "i am Item2", Toast.LENGTH_SHORT).show(); break; case 2: Toast.makeText(MainActivity.this, "i am Item3", Toast.LENGTH_SHORT).show(); break; } dialog.dismiss(); // 选完之后就消失 } }); bui_Single.create().show(); } // 5.复选对话框 public void showMultiDia() { final AlertDialog.Builder bui_Multi = new AlertDialog.Builder( MainActivity.this); bui_Multi.setTitle("复选框"); bui_Multi.setIcon(android.R.drawable.ic_dialog_info); bui_Multi.setMultiChoiceItems( new String[] { "Item1", "Item2", "Item3" }, null, new OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { // TODO Auto-generated method stub } }); bui_Multi.setPositiveButton("确定", null).setNegativeButton("取消", null); bui_Multi.create().show(); } // 6.自定义布局的对话框 public void showCustomDia() { LayoutInflater inflater = getLayoutInflater(); final View layout = inflater.inflate(R.layout.dialog, (ViewGroup) findViewById(R.id.dialog)); final AlertDialog.Builder bui_Custom = new AlertDialog.Builder( MainActivity.this); bui_Custom.setTitle("自定义布局").setView(layout) .setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) {//!!注意要在layout里获取editName EditText diaInput = (EditText) layout .findViewById(R.id.editName); Toast.makeText(MainActivity.this, "名字是" + diaInput.getText().toString(), Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }); bui_Custom.create().show(); } // 7.按退出时弹出的对话框 protected void Dialog() { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("提示");// 标题栏 builder.setMessage("确定退出吗?");// 内容栏 // 设置按钮(确认按钮positivebutton) builder.setPositiveButton("确认", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss();// 关闭对话框,释放对话框所占的资源 MainActivity.this.finish();// 销毁活动 } }); // 设置按钮(取消按钮negetivewbutton) builder.setNegativeButton("取消", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show();// 布置完之后就显示 } // 捕捉返回键常用方法 public boolean onKeyDown(int keyCode, KeyEvent event) { /* * event.getRepeatCount() ==0这是重复次数。点后退键的时候, * 为了防止点得过快,触发两次后退事件,故做此设置。建议保留这个判断,增强程序健壮性。 */ if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { Dialog(); } return false; } }
注意:AlertDialog不能直接通过 new来获取,因为它的构造方法都是受保护的(protected),必须通过
AlertDialog.Builder builder = new AlertDialog.Builder(this);