浅析Android中强大的Dialog

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>

(0)

相关推荐

  • android dialog边框去除白色边框实现思路及代码

    使用样式文件,在values 目录下新建styles.xml文件,编写如下代码: 复制代码 代码如下: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><resources> <style name="dialog" parent="@android:style/Theme.Dialog">

  • Android Dialog 设置字体大小的具体方法

    先看下面图片: 这是我在做登录页面的时候,调用系统的ProgressDialog 进行等待,可是看起来很不协调,左边的等待图片过大,右边文字过小,看起来老别扭,虽然功能上不存在什么问题,但是我有强迫症,看不顺的就像弄掉.可是找了好久,没发现 ProgressDialog  有一个方法是可以设置字体的. 于是我又来CSDN查找解决方案,可是找了好久,翻了好几页都没看到想要的结果,心冷了,找到的都说ProgressDialog 可以自定义一个View,在layout定义一个布局,然后设置到Progr

  • Android 对话框(Dialog)大全示例(建立你自己的对话框)

    Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog(int), dismissDialog(int)等方法,如果使用这些方法的话,Activity将通过getOwnerActivity()方法返回该Activity管理的对话框(dialog). onCreateDialog(int):当你使用这个回调函数时,Android系统会有效的设置这个Acti

  • Android自定义ProgressDialog进度等待框

    Android本身已经提供了ProgressDialog进度等待框,使用该Dialog,我们可以为用户提供更好的体验:在网络请求时,弹出此框等待网络数据. 不过,既然是为了提高用户体验,我们肯定希望该Dialog能更加炫酷,让用户看着更舒服.那如何做呢,当然是我们自己定义一个ProgressDialog了. 可以先看下,接下来将实现的Dialog效果图: 步骤1:要定义布局文件,该布局文件即是Dialog的布局了 <?xml version="1.0" encoding=&quo

  • Android入门之AlertDialog用法实例分析

    本文实例讲述的是AlertDialog,这种对话框会经常遇到.AlertDialog跟WIN32开发中的Dialog不一样,AlertDialog是非阻塞的,而阻塞的对话框用的是PopupWindow. 先贴出该程序运行的截图: main.xml的源码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.co

  • Android中自定义对话框(Dialog)的实例代码

    1.修改系统默认的Dialog样式(风格.主题) 2.自定义Dialog布局文件 3.可以自己封装一个类,继承自Dialog或者直接使用Dialog类来实现,为了方便以后重复使用,建议自己封装一个Dialog类 第一步: 我们知道Android定义个控件或View的样式都是通过定义其style来实现的,查看Android框架中的主题文件,在源码中的路径:/frameworks/base/core/res/res/values/themes.xml,我们可以看到,Android为Dialog定义了

  • Android开发笔记之:Dialog的使用详解

    Dialog是任何系统都必须有的一个控件,作为辅助窗口,用于显示一些消息,或请求用户采取一引起操作等.在Android中也不例外,基本使用可能参看文档.使用时的注意事项1. BACK键能取消掉对话框(dismiss),但是却不会触发其onOkey和onCancel回调接口,所以如果你的对话框会改某些状态,一定要注意还有第三种方式取消对话框.2. 尽量少用模态对话框(Model dialog),如果Dialog.setCancellable(false),就变成了一个模态对话框,除了程序内部把其D

  • android dialog自定义实例详解

    本人工作有一个月多了.对于android很多东西,都有了新的了解或者说真正的掌握.为了让更多的像我这样的小白少走弯路,所以我会坚持将我在工作中遇到的一些比较令我印象深刻的知识点整合出来给大家(顺序是按照我工作到现在的时间来制作的,其实也是想给自己一个记录吧.记录自己一路走来以及以后的路, 至少我想找到曾经的记录都有了). 第一个需求:简单的自定义dialog 需求:创建一个dialog,该dialog具备以下功能: 1.有一个窗口可以显示文章 2.根据需求显示 1)点击同意(不同意),触发对应的

  • Android ProgressBar进度条和ProgressDialog进度框的展示DEMO

    在做手机开发时,经常碰到一些比较耗时的操作,这个时候进度条就开始派上用场了.这个demo展示了ProgressBar进度条和ProgressDialog进度框.一.ProgressDialog进度框,效果如图所示:代码如下: 复制代码 代码如下: //进度对话框按钮监听     class ProssButtonListener implements OnClickListener {         @Override         public void onClick(View v) {

  • 浅析Android中强大的Dialog

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

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

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

  • Android中自定义的dialog中的EditText无法弹出输入法解决方案

    1.解决无法弹出输入法: 在show()方法调用之前,用dialog.setView(new EditText(context))添加一个空的EditText,由于是自定义的AlertDialog,有我们指定的布局,所以设置这个不会影响我们的功能,这样就可以弹出输入法了-- 2.可以弹出输入法了,但了为了增强用户体验性,当dialog中含有editText时应该,在显示dialog的同时自动弹出键盘: (1) 可以在自定义的dialog中增加如下方法: public void showKeybo

  • 浅析Android中getWidth()和getMeasuredWidth()的区别

    结论:getMeasuredWidth()获取的是view原始的大小,也就是这个view在XML文件中配置或者是代码中设置的大小.getWidth()获取的是这个view最终显示的大小,这个大小有可能等于原始的大小也有可能不等于原始大小. 1.getMeasuredWidth 从源码上来看,getMeasuredWidth()获取的是mMeasuredWidth的这个值.这个值是一个8位的十六进制的数字,高两位表示的是这个measure阶段的Mode的值,具体可以查看MeasureSpec的原理

  • Android中制作自定义dialog对话框的实例分享

    自定义dialog基础版 很多时候,我们在使用android sdk提供的alerdialog的时候,会因为你的系统的不同而产生不同的效果,就好比如你刷的是MIUI的系统,弹出框都会在顶部显示!这里简单的介绍自定义弹出框的应用. 首先创建布局文件dialog: 代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.and

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

  • 浅析Android中build.gradle的实用技巧

    1.替换符的使用 (1)在 app-android-defaultConfig (或者多渠道打包)下面可以这样使用 android { defaultConfig { manifestPlaceholders = [ //高德地图key GDKEY: "123456789", ] } } (2)在 AndroidManifest.xml 文件的 application 标签下面这样引用 <!-- 高德地图 --> <meta-data android:name=&qu

  • 浅析Android Dialog中setContentView()方法

    概述 Dialog在Android中是一个很优秀的工具.在使用Dialog时,我们一般都会自定义要显示的内容布局.Dialog自带了三个方法来支持自定义内容布局. public void setContentView (int layoutResID); public void setContentView (View view); public void setContentView (View view, ViewGroup.LayoutParams params); 这三个方法内部的实现原

随机推荐