`
XiangdongLee
  • 浏览: 90783 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

【攻克Android (14)】Dialog 对话框

 
阅读更多
本文围绕以下两个部分展开:

一、一个案例
        1、主界面
        2、对话框
        3、列表对话框
        4、单选对话框
        5、多选对话框
        6、自定义对话框

附   代码补充






一、一个案例

        1、主界面



        activity_main.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/btnAlertDialog"  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content"  
       android:onClick="onClick"  
       android:text="@string/btn_alert_dialog"/>  
   
   <Button  
       android:id="@+id/btnListAlertDialog"  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content"  
       android:layout_below="@+id/btnAlertDialog"  
       android:onClick="onClick"  
       android:text="@string/btn_list_alert_dialog"/>  
   
   <Button  
       android:id="@+id/btnSingleListAlertDialog"  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content"  
       android:layout_below="@+id/btnListAlertDialog"  
       android:onClick="onClick"  
       android:text="@string/btn_single_list_alert_dialog"/>  
   
   <Button  
       android:id="@+id/btnMultiListAlertDialog"  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content"  
       android:layout_below="@+id/btnSingleListAlertDialog"  
       android:onClick="onClick"  
       android:text="@string/btn_multi_list_alert_dialog"/>  
   
   <Button  
       android:id="@+id/btnCustomDialog"  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content"  
       android:layout_below="@+id/btnMultiListAlertDialog"  
       android:onClick="onClick"  
       android:text="@string/btn_custom_dialog"/>  
  
 </RelativeLayout>


        2、对话框









 private void alertDialog() {  
     // Builder 模式:建造者模式  
     // AlertDialog 的构造方法【受保护】,使用 Builder 创建对话框  
     AlertDialog.Builder builder = new AlertDialog.Builder(this);  
     // 设置对话框的图标 / 标题 / 内容  
     builder.setIcon(R.mipmap.ic_launcher);  
     builder.setTitle(getString(R.string.app_name));  
     builder.setMessage("夜深了~~~");  
  
     // 不可取消【默认 true】  
     builder.setCancelable(false);  
   
     // 设置按钮:确定、取消、中立【显示的位置固定】  
     builder.setPositiveButton(R.string.button_ok, new DialogInterface.OnClickListener() {  
         @Override  
         public void onClick(DialogInterface dialog, int which) {  
             showToast("OK Button.");  
         }  
     });  
     builder.setNegativeButton(R.string.button_cancel, new DialogInterface.OnClickListener() {  
         @Override  
         public void onClick(DialogInterface dialog, int which) {  
             showToast("Cancel Button.");  
         }  
     });  
     builder.setNeutralButton(R.string.button_neutral, new DialogInterface.OnClickListener() {  
         @Override  
         public void onClick(DialogInterface dialog, int which) {  
             showToast("Neutral Button.");  
         }  
     });  
   
     // 创建对话框  
     AlertDialog dialog = builder.create();  
     dialog.show();  
 }


        3、列表对话框





 private void listAlertDialog() {  
     AlertDialog.Builder builder = new AlertDialog.Builder(this);  
     // 设置对话框的图标 / 标题   
     builder.setIcon(R.mipmap.ic_launcher);  
     builder.setTitle(getString(R.string.btn_list_alert_dialog));  
   
     // 参数一:数据  
     // 参数二:选项的事件  
     builder.setItems(items, new DialogInterface.OnClickListener() {  
         @Override  
         public void onClick(DialogInterface dialog, int which) {  
             // 点击哪个选项就显示此选项 (which - 字符串数组的下标)  
             showToast(items[which]);  
         }  
     });  
   
     //  设置 取消 按钮,无监听事件  
     builder.setNegativeButton(R.string.button_cancel, null);  
   
     AlertDialog dialog = builder.create();  
     dialog.show();  
 }


        4、单选对话框



 private void singleListAlertDialog() {  
     AlertDialog.Builder builder = new AlertDialog.Builder(this);  
     builder.setIcon(R.mipmap.ic_launcher);  
     builder.setTitle(getString(R.string.btn_single_list_alert_dialog));  
   
     // 参数一:列表中的数据集  
     // 参数二:默认选中的位置,-1 无默认选中项  
     builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {  
         @Override  
         public void onClick(DialogInterface dialog, int which) {  
             // 点击哪个选项就显示此选项 (which - 字符串数组的下标)  
             showToast(items[which]);  
         }  
     });  
     builder.setNegativeButton(R.string.button_cancel, null);  
     builder.setPositiveButton(R.string.button_ok, null);  
  
     AlertDialog dialog = builder.create();  
     dialog.show();  
 }


        5、多选对话框





 private void multiListAlertDialog() {  
     AlertDialog.Builder builder = new AlertDialog.Builder(this);  
     builder.setIcon(R.mipmap.ic_launcher);  
     builder.setTitle(getString(R.string.btn_multi_list_alert_dialog));  
   
     builder.setCancelable(false);  
     final boolean[] checkedItems = new boolean[items.length];  
   
     // 参数一:列表中的数据集  
     // 参数二:列表中各项的状态(true 为选中、false 为未选中)  
     // 参数三:多选监听器  
     builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {  
         @Override  
         public void onClick(DialogInterface dialog, int which, boolean isChecked) {  
             checkedItems[which] = isChecked;  
         }  
     });  
   
     builder.setPositiveButton(R.string.button_ok, new DialogInterface.OnClickListener() {  
         @Override  
         public void onClick(DialogInterface dialog, int which) {  
             String text = "";  
   
             for (int i = 0; i < items.length; i++) {  
                 if (checkedItems[i]) {  
                     text += items[i] + ",";  
                 }  
             }  
             if (text.length() > 0) {  
                 text = text.substring(0, text.length() - 1);  
             } else {  
                 text = "你还没有选呢~";  
             }  
             showToast(text + "\n" + Arrays.toString(checkedItems));  
         }  
     });  
   
     AlertDialog dialog = builder.create();  
     dialog.show();  
 }


        6、自定义对话框





        (1)dialog_custom.xml :

 <?xml version="1.0" encoding="utf-8"?>  
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
               android:layout_width="match_parent"  
               android:layout_height="match_parent"  
               android:orientation="vertical"  
               android:padding="@dimen/activity_horizontal_margin">  
   
   <EditText  
       android:id="@+id/txtName"  
       android:layout_width="match_parent"  
       android:layout_height="wrap_content"  
       android:hint="@string/hint_name"/>  
   
   <EditText  
       android:id="@+id/txtPassword"  
       android:layout_width="match_parent"  
       android:layout_height="wrap_content"  
       android:hint="@string/hint_password"  
       android:inputType="textPassword"/>  
 </LinearLayout>


        (2)

 private void customDialog() {  
     AlertDialog.Builder builder = new AlertDialog.Builder(this);  
     builder.setIcon(R.mipmap.ic_launcher);  
     builder.setTitle(getString(R.string.btn_custom_dialog));  
   
     // 使用指定布局文件填充视图  
     View view = this.getLayoutInflater().inflate(  
             R.layout.dialog_custom, null);  
     txtName = (EditText) view.findViewById(R.id.txtName);  
     txtPassword = (EditText) view.findViewById(R.id.txtPassword);  
   
     // 设置对话框的视图  
     builder.setView(view);  
   
     builder.setNegativeButton(R.string.button_cancel, null);  
     builder.setPositiveButton(R.string.button_ok, new DialogInterface.OnClickListener() {  
         @Override  
         public void onClick(DialogInterface dialog, int which) {  
             String name = txtName.getText().toString();  
             String password = txtPassword.getText().toString();  
             showToast(name + "\n" + password);  
         }  
     });  
   
     AlertDialog dialog = builder.create();  
     dialog.show();  
 }



附   代码补充

        1. styles.xml(v21) :

 <?xml version="1.0" encoding="utf-8"?>  
 <resources>  
   
     <style name="AppTheme" parent="android:Theme.Material.Light">  
         <item name="android:colorPrimaryDark">@android:color/holo_blue_dark</item>  
         <item name="android:colorPrimary">@android:color/holo_blue_light</item>  
         <item name="android:navigationBarColor">@android:color/transparent</item>  
     </style>  
 </resources>


        2. strings.xml :

 <resources>  
   <string name="app_name">Dialog</string>  
   
   <string name="action_settings">Settings</string>  
  
   <string name="btn_alert_dialog">对话框</string>  
   <string name="btn_list_alert_dialog">列表对话框</string>  
   <string name="btn_single_list_alert_dialog">单选列表对话框</string>  
   <string name="btn_multi_list_alert_dialog">多选列表对话框</string>  
   <string name="btn_custom_dialog">自定义对话框</string>  
   
   <string name="button_ok">确定</string>  
   <string name="button_cancel">取消</string>  
   <string name="button_neutral">了解更多</string>  
   
   <string name="hint_name">网络名</string>  
   <string name="hint_password">密码</string>  
   
   <string-array name="skills">  
     <item>Android</item>  
     <item>iOS</item>  
     <item>Windows</item>  
     <item>Web</item>  
     <item>C/C++</item>  
   </string-array>  
 </resources>


        3. MainActivity :

 package com.android.dialog;  
  
 import android.app.Activity;  
 import android.app.AlertDialog;  
 import android.content.DialogInterface;  
 import android.os.Bundle;  
 import android.view.Menu;  
 import android.view.MenuItem;  
 import android.view.View;  
 import android.widget.EditText;  
 import android.widget.Toast;  
 
 import java.util.Arrays;  
 
 public class MainActivity extends Activity {  
     private String[] items;  
   
     private EditText txtName;  
     private EditText txtPassword;  
   
     @Override  
     protected void onCreate(Bundle savedInstanceState) {  
         super.onCreate(savedInstanceState);  
         setContentView(R.layout.activity_main);  
   
         // 通过读取资源文件 strings.xml 获得指定的字符串数组  
         items = this.getResources().getStringArray(R.array.skills);  
     }  
 
     public void onClick(View view) {  
         switch (view.getId()) {  
             case R.id.btnAlertDialog:  
                 alertDialog();  
                 break;  
             case R.id.btnListAlertDialog:  
                 listAlertDialog();  
                 break;  
             case R.id.btnSingleListAlertDialog:  
                 singleListAlertDialog();  
                 break;  
             case R.id.btnMultiListAlertDialog:  
                 multiListAlertDialog();  
                 break;  
             case R.id.btnCustomDialog:  
                 customDialog();  
                 break;  
         }  
     }  
   
     private void customDialog() {  
         AlertDialog.Builder builder = new AlertDialog.Builder(this);  
         builder.setIcon(R.mipmap.ic_launcher);  
         builder.setTitle(getString(R.string.btn_custom_dialog));  
   
         // 使用指定布局文件填充视图  
         View view = this.getLayoutInflater().inflate(  
                 R.layout.dialog_custom, null);  
         txtName = (EditText) view.findViewById(R.id.txtName);  
         txtPassword = (EditText) view.findViewById(R.id.txtPassword);  
   
         // 设置对话框的视图  
         builder.setView(view);  
   
         builder.setNegativeButton(R.string.button_cancel, null);  
         builder.setPositiveButton(R.string.button_ok, new DialogInterface.OnClickListener() {  
             @Override  
             public void onClick(DialogInterface dialog, int which) {  
                 String name = txtName.getText().toString();  
                 String password = txtPassword.getText().toString();  
                 showToast(name + "\n" + password);  
             }  
         });  
   
         AlertDialog dialog = builder.create();  
         dialog.show();  
     }  
  
     private void multiListAlertDialog() {  
         AlertDialog.Builder builder = new AlertDialog.Builder(this);  
         builder.setIcon(R.mipmap.ic_launcher);  
         builder.setTitle(getString(R.string.btn_multi_list_alert_dialog));  
   
         builder.setCancelable(false);  
         final boolean[] checkedItems = new boolean[items.length];  
   
         // 参数一:列表中的数据集  
         // 参数二:列表中各项的状态(true 为选中、false 为未选中)  
         // 参数三:多选监听器  
         builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {  
             @Override  
             public void onClick(DialogInterface dialog, int which, boolean isChecked) { 
                 checkedItems[which] = isChecked;  
             }  
         });  
   
         builder.setPositiveButton(R.string.button_ok, new DialogInterface.OnClickListener() {  
             @Override  
             public void onClick(DialogInterface dialog, int which) {  
                 String text = "";  
   
                 for (int i = 0; i < items.length; i++) {  
                     if (checkedItems[i]) {  
                         text += items[i] + ",";  
                     }  
                 }  
                 if (text.length() > 0) {  
                     text = text.substring(0, text.length() - 1);  
                 } else {  
                     text = "你还没有选呢~";  
                 }  
                 showToast(text + "\n" + Arrays.toString(checkedItems));  
             }  
         });  
   
         AlertDialog dialog = builder.create();  
         dialog.show();  
     }  

     private void singleListAlertDialog() {  
         AlertDialog.Builder builder = new AlertDialog.Builder(this);  
         builder.setIcon(R.mipmap.ic_launcher);  
         builder.setTitle(getString(R.string.btn_single_list_alert_dialog));  
   
         // 参数一:列表中的数据集  
         // 参数二:默认选中的位置,-1 无默认选中项  
         builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() { 
             @Override  
             public void onClick(DialogInterface dialog, int which) {  
                 // 点击哪个选项就显示此选项 (which - 字符串数组的下标)  
                 showToast(items[which]);  
             }  
         });  
         builder.setNegativeButton(R.string.button_cancel, null);  
         builder.setPositiveButton(R.string.button_ok, null);  
   
         AlertDialog dialog = builder.create();  
         dialog.show();  
     }  
  
     private void listAlertDialog() {  
         AlertDialog.Builder builder = new AlertDialog.Builder(this);  
         // 设置对话框的图标 / 标题 / 内容  
         builder.setIcon(R.mipmap.ic_launcher);  
         builder.setTitle(getString(R.string.btn_list_alert_dialog));  
   
         // 参数一:数据  
         // 参数二:选项的事件  
         builder.setItems(items, new DialogInterface.OnClickListener() {  
             @Override  
             public void onClick(DialogInterface dialog, int which) {  
                 // 点击哪个选项就显示此选项 (which - 字符串数组的下标)  
                 showToast(items[which]);  
             }  
         });  
  
         //  设置 取消 按钮,无监听事件  
         builder.setNegativeButton(R.string.button_cancel, null);  
   
         AlertDialog dialog = builder.create();  
         dialog.show();  
     }  
   
     private void alertDialog() {  
         // Builder 模式:建造者模式  
         // AlertDialog 的构造方法【受保护】,使用 Builder 创建对话框  
         AlertDialog.Builder builder = new AlertDialog.Builder(this);  
         // 设置对话框的图标 / 标题 / 内容  
         builder.setIcon(R.mipmap.ic_launcher);  
         builder.setTitle(getString(R.string.app_name));  
         builder.setMessage("夜深了~~~");  
   
         // 不可取消【默认 true】  
         builder.setCancelable(false);  
   
         // 设置按钮:确定、取消、中立【显示的位置固定】  
         builder.setPositiveButton(R.string.button_ok, new DialogInterface.OnClickListener() {  
             @Override  
             public void onClick(DialogInterface dialog, int which) {  
                 showToast("OK Button.");  
             }  
         });  
         builder.setNegativeButton(R.string.button_cancel, new DialogInterface.OnClickListener() {  
             @Override  
             public void onClick(DialogInterface dialog, int which) {  
                 showToast("Cancel Button.");  
             }  
         });  
         builder.setNeutralButton(R.string.button_neutral, new DialogInterface.OnClickListener() {  
             @Override  
             public void onClick(DialogInterface dialog, int which) {  
                 showToast("Neutral Button.");  
             }  
         });  
   
         // 创建对话框  
         AlertDialog dialog = builder.create();  
         dialog.show();  
     }  
   
     private void showToast(String text) {  
         Toast.makeText(this, text, Toast.LENGTH_SHORT).show();  
     }  
   
     @Override  
     public boolean onCreateOptionsMenu(Menu menu) {  
         // Inflate the menu; this adds items to the action bar if it is present.  
         getMenuInflater().inflate(R.menu.menu_main, menu);  
         return true;  
     }  
   
     @Override  
     public boolean onOptionsItemSelected(MenuItem item) {  
         // Handle action bar item clicks here. The action bar will  
         // automatically handle clicks on the Home/Up button, so long  
         // as you specify a parent activity in AndroidManifest.xml.  
        int id = item.getItemId();  
   
        //noinspection SimplifiableIfStatement  
        if (id == R.id.action_settings) {  
             return true;  
        }  
  
         return super.onOptionsItemSelected(item);  
     }  
 }

0
0
分享到:
评论

相关推荐

    Android-Dialog对话框

    在Android开发中,Dialog对话框是一种常见的用户交互组件,它用于在主界面之上显示一个临时窗口,用于提示信息、确认操作或提供选择项。本文将深入探讨`Android-Dialog`对话框的相关知识点,并结合源码分析,以帮助...

    android各种Dialog对话框示例

    本示例将详细探讨Android中的各种Dialog对话框及其使用方法。 1. **AlertDialog** AlertDialog是Android中最基础的对话框类型,通常包含一个标题、一个信息文本和一到三个按钮(例如:确定、取消)。创建...

    Android dialog对话框用法实例.rar

    在Android开发中,Dialog对话框是一种非常常见的组件,它用于在主线程中向用户展示一些信息,接收用户的输入,或者进行一些确认操作。这个“Android dialog对话框用法实例.rar”压缩包提供了一些示例代码,帮助...

    Android自定义dialog对话框

    在Android开发中,自定义对话框(Dialog)是一种常见的用户交互方式,它可以提供更为丰富的界面样式和功能,增强用户体验。本教程将详细讲解如何创建一个仿新浪微博风格的自定义Dialog,该Dialog设计简洁且美观,...

    Android Dialog对话框用法演示实例.rar

    Android Dialog对话框用法演示实例,通过...所以我们要学习好Android 中的dialog生成各种对话框的用法,并在适当的地方灵活运用。比如一些常用的场景就是:用户登录提示、网络正在下载提示、下载成功与失败的提示等。

    Android-所有Dialog对话框(源码).zip

    Android-所有Dialog对话框(源码).zip Android-所有Dialog对话框(源码).zip Android-所有Dialog对话框(源码).zip

    Dialog对话框之android 自定义对话框代码

    在Android开发中,Dialog对话框是一种非常常见的组件,它用于向用户展示临时信息或进行简单的交互操作。自定义对话框可以让我们根据应用的UI风格和功能需求,灵活地设计对话框的布局和行为。以下是对"Dialog对话框之...

    Android代码-Android Dialog 安卓对话框

    Android Dialog 即 Android对话框,在Android开发中,我们经常会需要在Android界面上弹出一些对话框,以询问用户或者让用户选择。Android Dialog 一般有五种,分别是:一般对话框,列表对话框,单选按钮对话框,多选...

    Android项目所有Dialog对话框.rar

    本资源“Android项目所有Dialog对话框.rar”包含了一系列Android项目中常用的Dialog对话框示例,这对于开发者深入理解和应用Dialog对话框功能至关重要。 首先,Dialog是Android系统提供的一个组件,它浮现在...

    androidDialog对话框.zip

    在Android开发中,对话框(Dialog)是一种常见的用户交互组件,用于向用户显示临时信息或者进行简单的交互操作。本资源“androidDialog对话框.zip”包含了关于Android中Dialog使用的实例代码,方便开发者参考和使用...

    安卓Dialog对话框相关-圆角对话框的实现原理及效果.rar

    在Android开发中,Dialog对话框是一种常见的用户交互组件,它用于在主界面之上显示临时信息或获取用户输入。本资源“安卓Dialog对话框相关-圆角对话框的实现原理及效果.rar”似乎包含了一些关于创建具有圆角效果的...

    安卓Android源码——(Dialog对话框).zip

    本资源“安卓Android源码——(Dialog对话框).zip”可能包含了关于如何创建、自定义和使用Dialog对话框的详细示例代码。通过分析这些源码,我们可以深入理解Dialog的工作原理,并提升在实际应用中的开发能力。 首先...

    Android Dialog对话框Demo源码.rar

    在Android开发中,Dialog对话框是一种非常常见的组件,它用于向用户展示临时信息或进行简单的交互操作。在本文中,我们将深入探讨Android Dialog的基本概念、种类、创建方法以及如何通过提供的"Dialog对话框Demo源码...

    Android之IOS风格Dialog对话框

    在Android开发中,为了提供与iOS应用相似的用户体验,开发者有时会选择实现iOS风格的Dialog对话框。这种对话框通常具有更简洁、优雅的设计,以及不同的交互方式。在本篇文章中,我们将深入探讨如何在Android中创建...

    弹出dialog对话框按钮在外

    在IT行业中,尤其是在软件开发和用户界面设计领域,"弹出dialog对话框按钮在外"这一概念涉及到了人机交互和GUI(图形用户界面)设计的原则。Dialog对话框通常用于向用户展示临时信息、请求确认或者收集输入数据。当...

    android 打开文本对话框

    首先,我们要知道Android中的对话框(Dialog)是应用程序窗口的一种形式,它浮现在当前活动(Activity)之上,提供一种与用户交互的方式。对话框通常用于提示用户做出选择、输入信息或者显示警告。 1. **创建对话框...

    基于Android的所有Dialog对话框.zip

    在Android开发中,Dialog对话框是一种非常常见的组件,它用于向用户显示临时信息或获取用户的简单反馈。在基于Android的所有Dialog对话框.zip压缩包中,很可能包含了一系列关于Android Dialog使用的示例代码,适用于...

    安卓Dialog对话框相关-androiddialog总结Dialog整理.rar

    在Android开发中,Dialog对话框是一种非常常见的组件,它用于在主界面之上显示临时的通知或交互信息,而不中断用户对应用程序的主要操作。本资源“安卓Dialog对话框相关-androiddialog总结Dialog整理.rar”提供了...

Global site tag (gtag.js) - Google Analytics