android 开发AlertDialog.builder对话框的实现

  AndroidAPI提供了Dialog对话框控件,但google明确指出不建议开发者只是使用Dialog来创建对话框,而应该自定义对话框或者使用API中提供的Dialog的子类,如AlertDialog。接下来记录下AlertDialog的具体使用,供广大初学者学习,也供自己日后查阅。

  首先在资源文件xml中写入一个按钮。

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="警告对话框" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button1"
        android:layout_alignRight="@+id/button1"
        android:layout_below="@+id/button1"
        android:layout_marginTop="17dp"
        android:text="选择" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button2"
        android:layout_alignRight="@+id/button2"
        android:layout_below="@+id/button2"
        android:layout_marginTop="23dp"
        android:text="单选对话框" />

</RelativeLayout>
  •  创建简单提示窗口

  在activity中,声明全局变量AlertDialog窗口对象建造者AlertDialog.Builder builder,并在onCreate方法中实例化这个窗口对象建造者new AlertDialog.Builder(this)。

  API对该对象提供了相当丰富的方法。

  如:builder.setTitile("设置窗口标题");

    bulder.setMessage("设置窗口内容");

    builder.setIcon("设置窗口图标");

    ......

  为窗口创建建造者注册相关按钮:

    “取消”,“确定”,“忽略”等相关按钮,由于是学习当中,按钮的监听事件只是做了简单的吐司处理,在正常开发中是要进行业务逻辑处理的。

    

 1         //通过窗口对象建造者注册“确定”按钮,通过DialogInterface接口注册点击事件
 2         builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
 3
 4             @Override
 5             public void onClick(DialogInterface dialog, int which) {
 6                 // TODO Auto-generated method stub
 7                 //完成业务逻辑代码的编写
 8                 Toast.makeText(MainActivity.this, "确定删除!", 1).show();
 9             }
10         });
11         //通过窗口对象建造者注册“取消”按钮,通过DialogInterface接口注册点击事件
12         builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
13             @Override
14             public void onClick(DialogInterface dialog, int which) {
15                 // TODO Auto-generated method stub
16                 Toast.makeText(MainActivity.this, "取消操作!", 1).show();
17             }
18         });
19         //通过窗口对象建造者注册“忽略”按钮,通过DialogInterface接口注册点击事件
20         builder.setNeutralButton("忽略", new DialogInterface.OnClickListener() {
21             @Override
22             public void onClick(DialogInterface dialog, int which) {
23                 // TODO Auto-generated method stub
24                 Toast.makeText(MainActivity.this, "忽略操作!", 1).show();
25             }
26         });
27         button.setOnClickListener(new OnClickListener() {
28             @Override
29             public void onClick(View view) {
30                 // TODO Auto-generated method stub
31 //                Toast.makeText(MainActivity.this, "谁让你点击的?逗", 1).show();
32                 //窗口构建完毕后,展示窗口
33                 builder.show();
34             }
35         });
  •  创建多选窗口

    通过按钮注册点击事件,在点击事件中,初始化并实例化窗口对象创建者:AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 之后的操作创建简单对话框基本一致。

    

 1         button2.setOnClickListener(new OnClickListener() {
 2             @Override
 3             public void onClick(View v) {
 4                 // TODO Auto-generated method stub
 5                 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
 6                 builder.setTitle("选择爱好");
 7                 final String[] hobby = {"上网","聊天","打游戏"} ;
 8                 builder.setMultiChoiceItems(hobby, new boolean[]{true,false,true}, new DialogInterface.OnMultiChoiceClickListener() {
 9                     @Override
10                     public void onClick(DialogInterface dialog, int which, boolean isChecked) {
11                         // TODO Auto-generated method stub
12                         if(isChecked){
13                             Toast.makeText(MainActivity.this, "选择---->"+hobby[which], 1).show();
14                         }else{
15                             Toast.makeText(MainActivity.this, "取消---->"+hobby[which], 1).show();
16                         }
17                     }
18                 });
19                 builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
20                     @Override
21                     public void onClick(DialogInterface dialog, int which) {
22                         // TODO Auto-generated method stub
23                     }
24                 });
25                 builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
26                     @Override
27                     public void onClick(DialogInterface dialog, int which) {
28                         // TODO Auto-generated method stub
29                     }
30                 });
31                 //窗口构建完毕后,展示窗口
32                 builder.show();
33             }
34         });
  •  创建单选窗口

    通过按钮注册点击事件,在点击事件中,初始化并实例化窗口对象创建者:AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 之后的操作跟创建多选窗口基本一致。

 1 button3.setOnClickListener(new OnClickListener() {
 2             @Override
 3             public void onClick(View v) {
 4                 // TODO Auto-generated method stub
 5                 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
 6                 builder.setTitle("选择爱好");
 7                 final String[] hobby = {"上网","聊天","打游戏"} ;
 8                 //窗口对象创建者可以放adapter容器
 9 //                builder.setAdapter(adapter, listener);
10                 //为窗口对象建造者创建供选择的列表,若未选择任何一项,参数是  :  -1
11                 builder.setSingleChoiceItems(new String[]{"上网","聊天","打游戏"},
12                         -1,new DialogInterface.OnClickListener() {
13                             @Override
14                             public void onClick(DialogInterface dialog, int which) {
15                                 Toast.makeText(MainActivity.this, "您选择了--》"+hobby[which], 1).show();
16                             }
17                         });
18                 //通过窗口对象建造者注册“确定”按钮,通过DialogInterface接口注册点击事件
19                 builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
20                     @Override
21                     public void onClick(DialogInterface dialog, int which) {
22
23                     }
24                 });
25                 //通过窗口对象建造者注册“忽略”按钮,通过DialogInterface接口注册点击事件
26                 builder.setNeutralButton("忽略", new DialogInterface.OnClickListener() {
27                     @Override
28                     public void onClick(DialogInterface dialog, int which) {
29
30                     }
31                 });
32                 //通过窗口对象建造者注册“取消”按钮,通过DialogInterface接口注册点击事件
33                 builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
34                     @Override
35                     public void onClick(DialogInterface dialog, int which) {
36
37                     }
38                 });
39                 //窗口完毕后,对窗口进行展示
40                 builder.show();
41             }
42         });

时间: 2024-10-05 23:47:56

android 开发AlertDialog.builder对话框的实现的相关文章

Android开发AlertDialog解析

打开源码,首先映入眼帘的是三个构造方法,但这三个构造方法都是protected类型的, 可见,不允许我们直接实例化AlertDialog. 因此,我们再看别的有没有方法.可以实例化 再仔细一看,发现一个变量 , AlertController mAlert; 这个才是我们今天的主角,重点研究它. mAlert的定义是在 ,以上我们提到的AlertDialog的构造函数, 此外,我们还发现,AlertDialog中几乎所有的方法都是通过这个mAlert变量来操作的, 也就是说,AlertDialo

【Exception】 java.lang.NoSuchMethodError: android.app.AlertDialog$Builder.setOnDismissListener

f(Build.VERSION.SDK_INT >10) builder =newAlertDialog.Builder(getActivity(), R.style.Theme.Sherlock.Dialog);else builder =newAlertDialog.Builder(getActivity());AlertDialog.Builder builder;try{ builder =newAlertDialog.Builder(getActivity(), R.style.The

Android 使alertDialog.builder不会点击外面和按返回键消失

这个问题之前一直困扰我,我的需求就是点击对话框外面和按返回键对话框不会消失,按返回键还好解决,拦截下返回键就OK了. 但是点击外面不好解决.之前有人说模态对话框,我看了一会,觉得不是我想要的效果.popWindow的话,必须提供父view. 重新看下api,发现设置setCancelable属性就行了. 如: public void showNoProject(){ Builder builder = new AlertDialog.Builder(MainActivity.this) .set

Android开发之自定义对话框

由于系统自带的对话框不好看,于是本人就自定义了一个对话框,以后有类似的就可以直接使用啦.先上效果图: 1,布局文件dialog_clear_normal.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width=&q

Android(java)学习笔记197:常见对话框使用AlertDialog.Builder

1.确认取消对话框: AlertDialog.Builder builder = new Builder(this); // 告诉工厂生产什么样的产品 builder.setTitle("友情提醒"); builder.setMessage("若练此功,必先自宫,是否继续?"); builder.setPositiveButton("好的,想好了", new OnClickListener() { @Override public void on

【Android】Android中AlertDialog对话框的使用实例

package com.ceac.deng; import android.R.string; import android.support.v7.app.ActionBarActivity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.content.DialogInterface; import android.os.Bundle; import android.

解决在BroadcastReceiver(广播接受者)中不能添加AlertDialog(对话框)的问题(android.view.WindowManager$BadTokenException)

在BroadcastReceiver,当我们创建一个AlertDialog并show出来的时候,出现了下面的错误: 12-24 14:10:57.025: E/AndroidRuntime(17600): java.lang.RuntimeException: Unable to start receiver com.ustc.broadcastreceiver.ForceOfflineReceiver: android.view.WindowManager$BadTokenException:

Android开发04

错误调试,由下至上,找CausedBy(然后并没有找到) 里面出现的java异常,在这个异常下面找自己的类中出现的问题,双击可以打开对应的位置 在上一篇笔记中,引入了ListView控件 但是在使用的时候,ListView控件里拖动太快就容易导致内存溢出(条目足够多的情况下)不断拖动,就会不断创建对象,然而垃圾回收器这个时候如果还没有进行回收的话,就一样会导致程序内存溢出,然后崩溃. ListView中getView方法的四个参数 Int Position 当前View控件的条目数 View c

Android 5中样式对话框

package com.imooc.dialog; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.content.DialogInterface; import android.os.Bundle; import android.view.LayoutInflater; import android.view.V