您的位置:首页 > 移动开发 > Android开发

Android的各种Dialog

2016-08-25 15:49 141 查看
   零零碎碎的一些知识点不知道整理到哪里好些,干脆搬上博客,方便查看,也当做监督自己每天都要有所收获吧,整理的过程也算是梳理思路,自己复习起来也舒心一些。就像一个学长说的,要一次钻研一个知识点,一个萝卜一个坑。对于我自己的做法的话,简单的知识点就像列提纲一样过,别浪费过多精力,难的知识点我会细细咀嚼,用自己通熟易懂语言呈现出来,也希望这个过程中形成自己写博客的风格吧。
   

下面进入正题了,昨天花了不少时间整理了一下各种对话框,这也是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() {
@Overrid
4000
e
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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android