浅析Android中强大的Dialog

时间:2022-06-06 07:10:43

android中经常会使用到dialog(弹出框效果),而且功能非常强大,可以模拟出n种弹出框效果。如图所示:

浅析Android中强大的Dialog

下面将通过一个小实例,来像大家展示android中功能强大的dialog。代码都写了详细的注释,读者不妨试着手动去敲。

当然,由于时间的关系,还有个别功能没有完成,先有的几个展示效果中也可能有bug,代码也有很多需要优化的地方。望大家热心指出。

下面是代码(有点长哦):

复制代码 代码如下:


package com.chaoyang.activity;

 

import java.util.arraylist;

import android.app.activity;
import android.app.alertdialog;
import android.app.progressdialog;
import android.content.dialoginterface;
import android.os.bundle;
import android.view.view;
import android.widget.button;


public class mainactivity extends activity {
    /** called when the activity is first created. */

 final string[] items={"张三","李四","王五","赵六","阿猫","阿狗"};
    int msinglechoiceid = -1;
    arraylist <integer>multichoiceid = new arraylist <integer>();
    private progressdialog mprogressdialog  = null;
    private static final int max_progress = 100;
    @override
    public void oncreate(bundle savedinstancestate) {
        super.oncreate(savedinstancestate);
        setcontentview(r.layout.main);
        /*start 设置那些按钮的点击监听对象*/
        buttononcliklisten listen =new buttononcliklisten();
        button btnconfim =(button)this.findviewbyid(r.id.btnconfim);
        button btncheck =(button)this.findviewbyid(r.id.btncheck);
        button btncustom =(button)this.findviewbyid(r.id.btncustom);
        button btnlist =(button)this.findviewbyid(r.id.btnlist);
        button btnmore =(button)this.findviewbyid(r.id.btnmore);
        button btnprogressbar =(button)this.findviewbyid(r.id.btnprogressbar);
        button btnread =(button)this.findviewbyid(r.id.btnread);
        button btnridio =(button)this.findviewbyid(r.id.btnridio);

        btnconfim.setonclicklistener(listen);
        btncheck.setonclicklistener(listen);
        btnconfim.setonclicklistener(listen);
        btnlist.setonclicklistener(listen);
        btnmore.setonclicklistener(listen);
        btnprogressbar.setonclicklistener(listen);
        btnread.setonclicklistener(listen);
        btnridio.setonclicklistener(listen);

        /* end */

    }
    //定义一个公共方法,弹出消息
    private void showdialogmsg(string msg) {
     new alertdialog.builder(mainactivity.this)
            .setmessage(msg)
            .show();
       }
    //定义一个内部类,继承至onclicklistener,专门来处理按钮点击事件(面向对象,灵活)
    private final class buttononcliklisten implements view.onclicklistener
    {

  @override
  public void onclick(view v) {
   // todo auto-generated method stub
   button button =(button) v;//接收被点击的button对象
   alertdialog.builder builder =new alertdialog.builder(mainactivity.this);//定义一个弹出框对象
   builder.seticon(r.drawable.aa);//设置弹出框的icon

   switch (v.getid())
   {
   case r.id.btnconfim :
    builder.settitle("确定提交吗?");//设置弹出框的标题
    builder.setpositivebutton("确定", new dialoginterface.onclicklistener() { 
     @override
     public void onclick(dialoginterface dialog, int which) {
      showdialogmsg("您选择了确定");
     }
    });
    builder.setnegativebutton("取消", new dialoginterface.onclicklistener() {

     @override
     public void onclick(dialoginterface dialog, int which) {
      showdialogmsg("您选择了取消");  
     }
    });

    break;
   case r.id.btnmore:
    builder.settitle("评价");//标题
    builder.setmessage("说说李孝利在你心里的印象");//弹出框消息
    builder.setpositivebutton("性感",new dialoginterface.onclicklistener() {

     @override
     public void onclick(dialoginterface dialog, int which) {
      // todo auto-generated method stub
         showdialogmsg("您觉得她很性感"); 
     }
    });
    builder.setneutralbutton("漂亮", new dialoginterface.onclicklistener() {

     @override
     public void onclick(dialoginterface dialog, int which) {
      // todo auto-generated method stub
       showdialogmsg("您觉得她很漂亮"); 
     }
    });
    builder.setnegativebutton("风骚", new dialoginterface.onclicklistener() {

     @override
     public void onclick(dialoginterface dialog, int which) {
      // todo auto-generated method stub
      showdialogmsg("您觉得她很风骚");
     }
    });
    break;
case r.id.btnlist :
    builder.settitle("列表框");
    builder.setitems(items, new dialoginterface.onclicklistener() {

     @override
     public void onclick(dialoginterface dialog, int which) {
      // todo auto-generated method stub
     showdialogmsg("您选择了id为"+which+"的人,名字叫:"+items[which]); 
     }
    });
    break;
   case r.id.btnridio:
     msinglechoiceid = -1;
    builder.settitle("单选框");
    builder.setsinglechoiceitems(items, 0, new dialoginterface.onclicklistener() {

     @override
     public void onclick(dialoginterface dialog, int which) {
      // todo auto-generated method stub
      msinglechoiceid=which;
      showdialogmsg("您选择了id是"+msinglechoiceid+",名字为:"+items[which]);
     }
    });
    builder.setpositivebutton("确定", new dialoginterface.onclicklistener() {

     @override
     public void onclick(dialoginterface dialog, int which) {
      // todo auto-generated method stub
      if(msinglechoiceid>-1)
      {
       showdialogmsg("您最终选择的是"+items[msinglechoiceid]);
      }else
      {
       showdialogmsg("您最终选择的是"+items[0]);
      }
     }
    });
    builder.setnegativebutton("取消", new dialoginterface.onclicklistener() {

     @override
     public void onclick(dialoginterface dialog, int which) {
      // todo auto-generated method stub

     }
    });
    break;
case r.id.btncheck :
 multichoiceid.clear(); //先清空集合
    builder.settitle("多项选择");
    builder.setmultichoiceitems(items,new boolean[]{false,false,false,false,false,false}, new dialoginterface.onmultichoiceclicklistener() {

     @override
     public void onclick(dialoginterface dialog, int which, boolean ischecked) {
      // todo auto-generated method stub
      if(ischecked)
      {
       multichoiceid.add(which);
       showdialogmsg("您选择了"+items[which]);
      }else
      {
       multichoiceid.remove(which);
      }

     }
    });
    builder.setpositivebutton("确定", new dialoginterface.onclicklistener() {

     @override
     public void onclick(dialoginterface dialog, int which) {
      // todo auto-generated method stub

     string str="";
     for(int i = 0;i<multichoiceid.size();i++)
     {
      str+=items[multichoiceid.get(i)]+",";
     }
     //去掉最后一个","
     if(str.length()>0){
    str = str.substring(0,str.length()-1);
     }
     showdialogmsg("你一共选择的有"+str);
     }
    });
    builder.setnegativebutton("取消", new dialoginterface.onclicklistener() {

     @override
     public void onclick(dialoginterface dialog, int which) {
      // todo auto-generated method stub

     }
    });
    break;
   case r.id.btnprogressbar:
    mprogressdialog =new progressdialog(mainactivity.this);
    mprogressdialog.settitle("进度条窗口");
    mprogressdialog.setprogressstyle(progressdialog.style_horizontal);//设置样式
    mprogressdialog.setmax(max_progress);//设置最大值
     mprogressdialog.setbutton("确定", new dialoginterface.onclicklistener() {
                  public void onclick(dialoginterface dialog, int whichbutton) {
                      //这里添加点击后的逻辑
                  }
              });
              mprogressdialog.setbutton2("取消", new dialoginterface.onclicklistener() {
                  public void onclick(dialoginterface dialog, int whichbutton) {
                      //这里添加点击后的逻辑
                  }
              });
              mprogressdialog.show();
              new thread().start();
              return;
case r.id.btncustom:

    break;
case r.id.btnread:

 break;
   }

   builder.create().show();//创建并显示弹出框 

   
  }

   
    }

   
}


布局文件部分,比较简单:

复制代码 代码如下:

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<textview 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
    <button
    android:id="@+id/btnconfim"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="确定/取消"
    />
     <button
    android:id="@+id/btnmore"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="多个消息提示"
    />
     <button
    android:id="@+id/btnlist"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="列表框"
    />
     <button
    android:id="@+id/btnprogressbar"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="进度条框"
    />
     <button
    android:id="@+id/btnridio"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="单选框"
    />
     <button
    android:id="@+id/btncheck"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="多选框"
    />
     <button
    android:id="@+id/btncustom"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="自定义布局"
    />
      <button
    android:id="@+id/btnread"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="读取进度框"
    />
</linearlayout>