浅析Android中强大的Dialog_Android

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

下面将通过一个小实例,来像大家展示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>

时间: 2024-10-31 18:55:42

浅析Android中强大的Dialog_Android的相关文章

浅析Android中强大的Dialog

Android中经常会使用到Dialog(弹出框效果),而且功能非常强大,可以模拟出N种弹出框效果.如图所示: 下面将通过一个小实例,来像大家展示Android中功能强大的Dialog.代码都写了详细的注释,读者不妨试着手动去敲. 当然,由于时间的关系,还有个别功能没有完成,先有的几个展示效果中也可能有bug,代码也有很多需要优化的地方.望大家热心指出. 下面是代码(有点长哦):复制代码 代码如下:package com.chaoyang.activity; import java.util.A

浅析Android中常见三种弹框在项目中的应用

一丶概述 弹框在Android项目中经常出现,常见的实现方法有三种:Dialog 弹框,Window弹框,Activity伪弹框.本文就说一说三种弹框的实现及在项目中的运用. 二丶演示图 图一为常见的三种弹框(文末上链接),图二为项目中用到的Activity伪弹框 三丶正文 1.Dialog弹框 先看一篇一篇文章: android 8种对话框(Dialog)使用方法汇总 Dialog是系统自带的弹框,然而常常因为UI不好看而遭嫌弃,常需要自定义 public class MyDialog ext

浅析android中的线程封装_Android

简单写一下android 对线程 的c++封装---其实API已经写得很清楚了-- 封装 的文件 :/frameworks/base/include/utils/threads.h 这里不讨论具体实现,具体实现是和系统 相关联的--首先Anroid提供了几个与直接创建线程的函数: 复制代码 代码如下: inline bool createThread(thread_func_t f, void *a)  inline bool createThreadEtc(thread_func_t entr

浅析Android中的visibility属性_Android

Android开发中,大部分控件都有visibility这个属性,其属性有3个分别为"visible "."invisible"."gone".主要用来设置控制控件的显示和隐藏.1) 可见(visible)XML文件:android:visibility="visible"Java代码:view.setVisibility(View.VISIBLE); 2) 不可见(invisible)XML文件:android:visibi

浅析android中的线程封装

简单写一下android 对线程 的c++封装---其实API已经写得很清楚了-- 封装 的文件 :/frameworks/base/include/utils/threads.h 这里不讨论具体实现,具体实现是和系统 相关联的--首先Anroid提供了几个与直接创建线程的函数:复制代码 代码如下:inline bool createThread(thread_func_t f, void *a) inline bool createThreadEtc(thread_func_t entryFu

浅析Android中的visibility属性

Android开发中,大部分控件都有visibility这个属性,其属性有3个分别为"visible "."invisible"."gone".主要用来设置控制控件的显示和隐藏.1) 可见(visible)XML文件:android:visibility="visible"Java代码:view.setVisibility(View.VISIBLE); 2) 不可见(invisible)XML文件:android:visibi

浅析android系统设计中的回调思想

一.为何写作本文 在慢慢深入接触android开发的过程中,我越来越发现android中(至少应用曾的开发)用到了很多回调的思想.比如activity的生命周期,fragment的生命周期,皆是回调函数实现的,android中的事件处理机制其一就是回调,线程方面的异步任务.loader.hanlder等都是基于回调的,等等. 可见android的其一根本思想就是回调,需要你来参与时,回调用相关的回调方法,你来填充. 可以说回调的思想浸润与android设计的方方面面,android开发中几乎带有

HTTPS 原理浅析及其在 Android 中的使用

本文首先分析HTTP协议在安全性上的不足,进而阐述HTTPS实现安全通信的关键技术点和原理.然后通过抓包分析HTTPS协议的握手以及通信过程.最后总结一下自己在开发过程中遇到的HTTPS相关的问题,并给出当前项目中对HTTPS问题的系统解决方案,以供总结和分享. 1.HTTP协议的不足 HTTP1.x在传输数据时,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份,存在的问题如下: 通信使用明文(不加密),内容可能会被窃听; 不验证通信方的身份,有可能遭遇伪装; 无法证明报文的完整性,

Android中的序列化浅析_Android

序列化原因 序列化的原因基本可以归纳为以下三种情况: 1.永久性保存对象,保存对象的字节序列到本地文件中: 2.对象在网络中传递: 3.对象在IPC间传递. 序列化方法 在Android系统中关于序列化的方法一般有两种,分别是实现Serializable接口和Parcelable接口,其中Serializable接口是来自Java中的序列化接口,而Parcelable是Android自带的序列化接口. 上述的两种序列化接口都有各自不同的优缺点,我们在实际使用时需根据不同情况而定. 1.Seria