当前位置: 代码迷 >> Android >> 【攻占Android (14)】Dialog 对话框
  详细解决方案

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

热度:514   发布时间:2016-04-27 23:41:35.0
【攻克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);       }   }

  相关解决方案