Android开发必知 九种对话框的实现方法_Android

在开发过程中,与用户交互式免不了会用到对话框以实现更好的用户体验,所以掌握几种对话框的实现方法还是非常有必要的。在看具体实例之前先对AlertDialog做一个简单介绍。AlertDialog是功能最丰富、实践应用最广的对话框,它可以生成各种内容的对话框。但实际上AlertDialog生成的对话框总体可分为以下4个区域:图标区、标题区、内容区、按钮区。

这里总结了九种对话框的实现方法,有需要的朋友可以来学习下了

 

除了popupwindow实现稍微麻烦一点,其他形似都相对简单,熟悉2便即可

直接上源码

package com.naoh.stu;
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.PopupWindow;
import android.widget.Toast;
public class DiaAllActivity extends Activity implements Runnable {
  private Button btn_diaNormal;
  private Button btn_diaMulti;
  private Button btn_diaList;
  private Button btn_diaSinChos;
  private Button btn_diaMultiChos;
  private Button btn_diaProcess;
  private Button btn_diaReadProcess;
  private Button btn_diaCustom;
  private Button btn_popUpDia;
  private PopupWindow window=null;
  private Button cusPopupBtn1;
  private View popupView;
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dialog);
    getView();
    setListener();
  }
  private void getView()
  {
    btn_diaNormal=(Button)findViewById(R.id.btn_diaNormal);
    btn_diaMulti=(Button)findViewById(R.id.btn_diaMulti);
    btn_diaList=(Button)findViewById(R.id.btn_diaList);
    btn_diaSinChos=(Button)findViewById(R.id.btn_diaSigChos);
    btn_diaMultiChos=(Button)findViewById(R.id.btn_diaMultiChos);
    btn_diaProcess=(Button)findViewById(R.id.btn_diaProcess);
    btn_diaReadProcess=(Button)findViewById(R.id.btn_diaReadProcess);
    btn_diaCustom=(Button)findViewById(R.id.btn_diaCustom);
    btn_popUpDia=(Button)findViewById(R.id.btn_popUpDia);
  }
  private void setListener()
  {
    btn_diaNormal.setOnClickListener(btnListener);
    btn_diaMulti.setOnClickListener(btnListener);
    btn_diaList.setOnClickListener(btnListener);
    btn_diaSinChos.setOnClickListener(btnListener);
    btn_diaMultiChos.setOnClickListener(btnListener);
    btn_diaProcess.setOnClickListener(btnListener);
    btn_diaReadProcess.setOnClickListener(btnListener);
    btn_diaCustom.setOnClickListener(btnListener);
    btn_popUpDia.setOnClickListener(btnListener);
  }
  private Button.OnClickListener btnListener= new Button.OnClickListener()
  {
    public void onClick(View v)
    {
      if(v instanceof Button)
      {
        int btnId=v.getId();
        switch(btnId)
        {
          case R.id.btn_diaNormal:
            showNormalDia();
            break;
          case R.id.btn_diaMulti:
            showMultiDia();
            break;
          case R.id.btn_diaList:
            showListDia();
            break;
          case R.id.btn_diaSigChos:
            showSinChosDia();
            break;
          case R.id.btn_diaMultiChos:
            showMultiChosDia();
            break;
          case R.id.btn_diaReadProcess:
            showReadProcess();
            break;
          case R.id.btn_diaProcess:
            showProcessDia();
            break;
          case R.id.btn_diaCustom:
            showCustomDia();
            break;
          case R.id.btn_popUpDia:
            showCusPopUp(v);
            break;
          default:
            break;
        }
      }
    }
  };
  /*普通的对话框*/
  private void showNormalDia()
  {
    //AlertDialog.Builder normalDialog=new AlertDialog.Builder(getApplicationContext());
    AlertDialog.Builder normalDia=new AlertDialog.Builder(DiaAllActivity.this);
    normalDia.setIcon(R.drawable.ic_launcher);
    normalDia.setTitle("普通的对话框");
    normalDia.setMessage("普通对话框的message内容");
    normalDia.setPositiveButton("确定", new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
        // TODO Auto-generated method stub
        showClickMessage("确定");
      }
    });
    normalDia.setNegativeButton("取消", new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
        // TODO Auto-generated method stub
        showClickMessage("取消");
      }
    });
    normalDia.create().show();
  }
  /*多按钮对话框*/
  private void showMultiDia()
  {
    AlertDialog.Builder multiDia=new AlertDialog.Builder(DiaAllActivity.this);
    multiDia.setTitle("多选项对话框");
    multiDia.setPositiveButton("按钮一", new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
        // TODO Auto-generated method stub
        showClickMessage("按钮一");
      }
    });
    multiDia.setNeutralButton("按钮二", new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
        // TODO Auto-generated method stub
        showClickMessage("按钮二");
      }
    });
    multiDia.setNegativeButton("按钮三", new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
        // TODO Auto-generated method stub
        showClickMessage("按钮三");
      }
    });
    multiDia.create().show();
  }
  /*列表对话框*/
  private void showListDia()
  {
    final String[] mList={"选项1","选项2","选项3","选项4","选项5","选项6","选项7"};
    AlertDialog.Builder listDia=new AlertDialog.Builder(DiaAllActivity.this);
    listDia.setTitle("列表对话框");
    listDia.setItems(mList, new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
        // TODO Auto-generated method stub
        /*下标是从0开始的*/
        showClickMessage(mList[which]);
      }
    });
    listDia.create().show();
  }
  /*单项选择对话框*/
  int yourChose=-1;
  private void showSinChosDia()
  {
    final String[] mList={"选项1","选项2","选项3","选项4","选项5","选项6","选项7"};
    yourChose=-1;
    AlertDialog.Builder sinChosDia=new AlertDialog.Builder(DiaAllActivity.this);
    sinChosDia.setTitle("单项选择对话框");
    sinChosDia.setSingleChoiceItems(mList, 0, new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
        // TODO Auto-generated method stub
        yourChose=which;
      }
    });
    sinChosDia.setPositiveButton("确定", new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
        // TODO Auto-generated method stub
        if(yourChose!=-1)
        {
          showClickMessage(mList[yourChose]);
        }
      }
    });
    sinChosDia.create().show();
  }
  ArrayList<Integer> myChose= new ArrayList<Integer>();
  private void showMultiChosDia()
  {
    final String[] mList={"选项1","选项2","选项3","选项4","选项5","选项6","选项7"};
    final boolean mChoseSts[]={false,false,false,false,false,false,false};
    myChose.clear();
    AlertDialog.Builder multiChosDia=new AlertDialog.Builder(DiaAllActivity.this);
    multiChosDia.setTitle("多项选择对话框");
    multiChosDia.setMultiChoiceItems(mList, mChoseSts, new DialogInterface.OnMultiChoiceClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which, boolean isChecked) {
        // TODO Auto-generated method stub
        if(isChecked)
        {
          myChose.add(which);
        }
        else
        {
          myChose.remove(which);
        }
      }
    });
    multiChosDia.setPositiveButton("确定", new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
        // TODO Auto-generated method stub
        int size=myChose.size();
        String str="";
        for(int i=0;i<size;i++)
        {
          str+=mList[myChose.get(i)];
        }
        showClickMessage(str);
      }
    });
    multiChosDia.create().show();
  }
  //进度读取框需要模拟读取
  ProgressDialog mReadProcessDia=null;
  public final static int MAX_READPROCESS = 100;
  private void showReadProcess()
  {
    mReadProcessDia=new ProgressDialog(DiaAllActivity.this);
    mReadProcessDia.setProgress(0);
    mReadProcessDia.setTitle("进度条窗口");
    mReadProcessDia.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    mReadProcessDia.setMax(MAX_READPROCESS);
    mReadProcessDia.show();
    new Thread(this).start();
  }
  //新开启一个线程,循环的累加,一直到100然后在停止
  @Override
  public void run()
  {
    int Progress= 0;
    while(Progress < MAX_READPROCESS)
    {
      try {
        Thread.sleep(100);
        Progress++;
        mReadProcessDia.incrementProgressBy(1);
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
    //读取完了以后窗口自消失
    mReadProcessDia.cancel();
  }
  /*读取中的对话框*/
  private void showProcessDia()
  {
    ProgressDialog processDia= new ProgressDialog(DiaAllActivity.this);
    processDia.setTitle("进度条框");
    processDia.setMessage("内容读取中...");
    processDia.setIndeterminate(true);
    processDia.setCancelable(true);
    processDia.show();
  }
  /*自定义对话框*/
  private void showCustomDia()
  {
    AlertDialog.Builder customDia=new AlertDialog.Builder(DiaAllActivity.this);
    final View viewDia=LayoutInflater.from(DiaAllActivity.this).inflate(R.layout.custom_dialog, null);
    customDia.setTitle("自定义对话框");
    customDia.setView(viewDia);
    customDia.setPositiveButton("确定", new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
        // TODO Auto-generated method stub
        EditText diaInput=(EditText) viewDia.findViewById(R.id.txt_cusDiaInput);
        showClickMessage(diaInput.getText().toString());
      }
    });
    customDia.create().show();
  }
  /*popup window 来实现*/
  private void showCusPopUp(View parent)
  {
    if(window == null)
    {
      popupView=LayoutInflater.from(DiaAllActivity.this).inflate(R.layout.dia_cuspopup_dia, null);
      cusPopupBtn1=(Button)popupView.findViewById(R.id.diaCusPopupSure);
      window =new PopupWindow(popupView,LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
    }
    window.setAnimationStyle(R.style.PopupAnimation);
    /*必须调用setBackgroundDrawable, 因为popupwindow在初始时,会检测background是否为null,如果是onTouch or onKey events就不会相应,所以必须设置background*/
    /*网上也有很多人说,弹出pop之后,不响应键盘事件了,这个其实是焦点在pop里面的view去了。*/
    window.setFocusable(true);
    window.setBackgroundDrawable(new BitmapDrawable());
    window.update();
    window.showAtLocation(parent, Gravity.CENTER_VERTICAL, 0, 0);
    cusPopupBtn1.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        showClickMessage("popup window的确定");
      }
    });
  }
  /*显示点击的内容*/
  private void showClickMessage(String message)
  {
    Toast.makeText(DiaAllActivity.this, "你选择的是: "+message, Toast.LENGTH_SHORT).show();
  }
} 

布局,就是一堆的button

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical" >
  <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="各种Dialog合集" />
  <Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="普通Dialog"
    android:id="@+id/btn_diaNormal"/>
  <Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="多按钮Dialog"
    android:id="@+id/btn_diaMulti"/>
  <Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="列表Dialog"
    android:id="@+id/btn_diaList"/>
  <Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="单项选择Dialog"
    android:id="@+id/btn_diaSigChos"/>
  <Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="多项选择Dialog"
    android:id="@+id/btn_diaMultiChos"/>
  <Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="进度条Dialog"
    android:id="@+id/btn_diaReadProcess"/>
  <Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="读取中Dialog"
    android:id="@+id/btn_diaProcess"/>
  <Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="自定义Dialog"
    android:id="@+id/btn_diaCustom"/>
  <Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="PopUpWindow实现的dialog"
    android:id="@+id/btn_popUpDia"/>
</LinearLayout> 

以上是Android开发必知 九种对话框的实现方法,代码主要用AlertDialog生成的对话框,它的功能丰富、使用最广。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android对话框
, android弹出对话框
android九中弹窗
css实现对话框、java实现聊天对话框、html5 实现弹出对话框、js实现对话框、全局性对话框实现方式,以便于您获取更多的相关知识。

时间: 2024-11-02 14:24:37

Android开发必知 九种对话框的实现方法_Android的相关文章

Android开发必知 九种对话框的实现方法

在开发过程中,与用户交互式免不了会用到对话框以实现更好的用户体验,所以掌握几种对话框的实现方法还是非常有必要的.在看具体实例之前先对AlertDialog做一个简单介绍.AlertDialog是功能最丰富.实践应用最广的对话框,它可以生成各种内容的对话框.但实际上AlertDialog生成的对话框总体可分为以下4个区域:图标区.标题区.内容区.按钮区. 这里总结了九种对话框的实现方法,有需要的朋友可以来学习下了 除了popupwindow实现稍微麻烦一点,其他形似都相对简单,熟悉2便即可 直接上

Android开发中听筒无法播放音乐的解决方法_Android

本文实例讲述了Android开发中听筒无法播放音乐的解决方法.分享给大家供大家参考,具体如下: 这个问题让我蛋疼了,既然百度也木有资料. 耗时的主要原因是因为权限不足时,而没有终止程序,只用了一小行日志提醒,没有看到 用听筒播放很简单 AudioManager.setMode(AudioManager.MODE_IN_CALL) //设定为通话中即可 还是这一句代码的事,不过记得要加上权限 Android.permission.MODIFY_AUDIO_SETTINGS 不然会像我一样蛋疼半天

Android开发之关闭和打开Speaker(扬声器)的方法_Android

本文实例讲述了Android开发之关闭和打开Speaker(扬声器)的方法.分享给大家供大家参考,具体如下: private int currVolume = 0; /** * 打开扬声器 */ private void openSpeaker() { try{ AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audioManager.setMode(AudioManager.

Android开发之利用Intent实现数据传递的方法_Android

本文实例讲述了Android利用Intent实现数据传递的方法.分享给大家供大家参考,具体如下: 在Android开发过程中,很多人都熟悉Intent,这是个用于在多个View之间共享数据的类.本节主要讲述通过点选ListView中的文本,把文本中的URL加载到一个新的页面上,并且打印出来.为了方便,我先把前面一篇<Android开发之利用jsoup解析HTML页面的方法>的代码重新贴一下,因为在上一节后,代码做了少许修改: try { doc = Jsoup.parse(new URL(&q

android开发 eclipse alt+”/”自动提示失效的解决方法_Android

1.用于没有一点提示的情况:依次打开eclipse上面的windows --preferences --java --editor -- content assist ,在右上方有一行"select the proposal kinds contained in the 'default' content assist list" 下面,勾选Java Prolosals 复选框,保存退出即可. 开发 eclipse alt+/自动提示失效的解决方法_Android-eclipse al

实例探究Android开发中Fragment状态的保存与恢复方法_Android

我们都知道,类似 Activity, Fragment 有 onSaveInstanceState() 回调用来保存状态. 在Fragment里面,利用onSaveInstanceState保存数据,并可在onActivityCreated里面恢复数据. public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); ... if (savedInsta

.NET程序员项目开发必知必会—Dev环境中的集成测试用例执行时上下文环境检查(实战)

Microsoft.NET 解决方案,项目开发必知必会. 从这篇文章开始我将分享一系列我认为在实际工作中很有必要的一些.NET项目开发的核心技术点,所以我称为必知必会.尽管这一系列是使用.NET/C#来展现,但是同样适用于其他类似的OO技术平台,这些技术点可能称不上完整的技术,但是它是经验的总结,是掉过多少坑之后的觉醒,所以有必要花几分钟时间记住它,在真实的项目开发中你就知道是多么的有帮助.好了,废话不说了,进入主题. 我们在开发服务时为了调试方便会在本地进行一个基本的模块测试,你也可以认为是集

Xamarin.Android开发实践(九)

原文:Xamarin.Android开发实践(九) Xamarin.Android之ActionBar与菜单 一.选项卡 如今很多应用都会使用碎片以便在同一个活动中能够显示多个不同的视图.在 Android 3.0 以上的版本中,我们已经可以使用ActionBar提供的Tab来实现这种效果,而不需要我们自己去实现碎片的切换.ActionBar默认是不具备选项 卡功能的,所以我们需要给一个属性赋上对应的枚举,比如下面的方式将开启选项卡. 1 ActionBar.NavigationMode = A

Android开发中Eclipse报错及对应处理方法总结_Android

本文较为详细的总结了Android开发中Eclipse报错及对应处理方法.分享给大家供大家参考,具体如下: 报错1: Conversion to Dalvik format failed with error 1 报错原因:原因是我在android工程中不小心多导入Java的mina,结果一跑程序就报这个错误. 解决方法:将Java中用到的mina包移除,就OK了. 小结:以后遇到这种报错时,记得提醒自己可能是由于自己导错包了. 附: 网上其他处理方法:<丢失Android系统库或者Conver