Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android--Dialog對話框

Android--Dialog對話框

編輯:關於Android編程

在Android開發當中,在界面上彈出一個Dialog對話框使我們經常需要做的,本篇做一下記錄,以備遺忘時查詢。

dialog就是一個在屏幕上彈出一個可以讓用戶做出一個選擇,或者輸入額外的信息的對話框,一個對話框並不會沾滿我們整個的屏幕,並且通常用於模型事件當中需要用戶做出一個決定後才會繼續執行。

Dialog類是dialog對話框的基類,但是我們應該避免直接使用這個類來實例化一個dialog對話框,我們應當使用其子類來得到一個對話框:

java.lang.Object
        android.app.Dialog

Known Direct Subclasses
AlertDialog, CharacterPickerDialog, MediaRouteChooserDialog, MediaRouteControllerDialog, Presentation

Known Indirect Subclasses
DatePickerDialog, ProgressDialog, TimePickerDialog

我們看到,Dialog有很多的子類實現,所以我們要定義一個對話框,使用其子類來實例化一個即可,而不要直接使用Dialog這個父類來構造。

我們看到,AlertDialog是Dialog的一個直接子類。

使用AlertDialog,我們可以顯示一個標題,最多3個按鈕操作,以及一組選擇框或者是自己定義的彈出框。

在AlertDialog中,定義按鈕都是通過 setXXXButton 方法來完成,其中一共有3種不同的Action Buttons供我們選擇:

 

1.setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener)
這是一個相當於OK、確定操作的按鈕,

2.setNegativeButton (CharSequence text, DialogInterface.OnClickListener listener)
這是一個相當於取消操作的按鈕。

3. setNeutralButton (CharSequence text, DialogInterface.OnClickListener listener)
這個是相當於一個忽略操作的按鈕。

 

我們每一種action buttons最多只能出現一個,即彈出對話框最多只能出現一個PositiveButton。

接下來我們通過一個一個的具體實例來看看我們常用的幾種AlertDialog對話框。

1.彈出一個警告框,並有三個按鈕可選擇

\

我們來看看代碼部分:

button.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                //    通過AlertDialog.Builder這個類來實例化我們的一個AlertDialog的對象
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                //    設置Title的圖標
                builder.setIcon(R.drawable.ic_launcher);
                //    設置Title的內容
                builder.setTitle("彈出警告框");
                //    設置Content來顯示一個信息
                builder.setMessage("確定刪除嗎?");
                //    設置一個PositiveButton
                builder.setPositiveButton("確定", new DialogInterface.OnClickListener()
                {
                    @Override
                    public void onClick(DialogInterface dialog, int which)
                    {
                        Toast.makeText(MainActivity.this, "positive: " + which, Toast.LENGTH_SHORT).show();
                    }
                });
                //    設置一個NegativeButton
                builder.setNegativeButton("取消", new DialogInterface.OnClickListener()
                {
                    @Override
                    public void onClick(DialogInterface dialog, int which)
                    {
                        Toast.makeText(MainActivity.this, "negative: " + which, Toast.LENGTH_SHORT).show();
                    }
                });
                //    設置一個NeutralButton
                builder.setNeutralButton("忽略", new DialogInterface.OnClickListener()
                {
                    @Override
                    public void onClick(DialogInterface dialog, int which)
                    {
                        Toast.makeText(MainActivity.this, "neutral: " + which, Toast.LENGTH_SHORT).show();
                    }
                });
                //    顯示出該對話框
                builder.show();
            }
        });

我們如果要創建一個AlertDialog對話框,需要使用AlertDialog的一個內部類,即AlertDialog.Builder來構建一個AlertDialog的對話框,然後通過setXX方法來設置我們想要顯示的內容即可。

我們看到,我們一共設置了3個action buttons,每一個button都為其綁定了一個 DialogInterface.OnClickListener() 的監聽事件,然後在裡面通過Toast吐司對話框(這個在後面隨筆中會講解)來彈出一下我們的一些信息,which方法表示的是action button所代表的int值:

positive:  -1
negative:  -2
neutral:  -3

我們可以知道,which=-1就表示點擊的是確定按鈕,-2表示點擊的是取消按鈕,-3表示點擊的是忽略按鈕。

\

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
 
public class SingleChoiceItemsTest extends Activity implements OnClickListener
{
    private String[] province = new String[] { "上海", "北京", "湖南", "湖北", "海南" };
    private Button btnSingleChoiceList;
    // 單擊事件對象的實例
    private ButtonOnClick buttonOnClick = new ButtonOnClick(1);
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
 
       btnSingleChoiceList = (Button) findViewById(R.id.btnSingleChoice);
       btnSingleChoiceList.setOnClickListener(this);
    }
 
    @Override
    public void onClick(View v)
    {
       showSingleChoiceButton();
    }
 
    // 在單選選項中顯示 確定和取消按鈕
    //buttonOnClickg變量的數據類型是ButtonOnClick,一個單擊事件類
    private void showSingleChoiceButton()
    {
       AlertDialog.Builder builder = new AlertDialog.Builder(this);
       builder.setTitle("請選擇省份");
       builder.setSingleChoiceItems(province, 0, buttonOnClick);
       builder.setPositiveButton("確定", buttonOnClick);
       builder.setNegativeButton("取消", buttonOnClick);
       builder.show();
    }
 
    private class ButtonOnClick implements DialogInterface.OnClickListener
    {
      
       private int index; // 表示選項的索引
 
       public ButtonOnClick(int index)
       {
           this.index = index;
       }
 
       @Override
       public void onClick(DialogInterface dialog, int which)
       {
           // which表示單擊的按鈕索引,所有的選項索引都是大於0,按鈕索引都是小於0的。
           if (which >= 0)
           {
              //如果單擊的是列表項,將當前列表項的索引保存在index中。
              //如果想單擊列表項後關閉對話框,可在此處調用dialog.cancel()
              //或是用dialog.dismiss()方法。
              index = which;
           }
           else
           {
              //用戶單擊的是【確定】按鈕
              if (which == DialogInterface.BUTTON_POSITIVE)
              {
                  //顯示用戶選擇的是第幾個列表項。
                  final AlertDialog ad = new AlertDialog.Builder(
                          SingleChoiceItemsTest.this).setMessage(
                          "你選擇的地區是:" + index + ":" + province[index]).show();
                  //五秒鐘後自動關閉。
                  Handler hander = new Handler();
                  Runnable runnable = new Runnable()
                  {
 
                     @Override
                     public void run()
                     {
                         ad.dismiss();
                     }
                  };
                  hander.postDelayed(runnable, 5 * 1000);
              }
              //用戶單擊的是【取消】按鈕
              else if (which == DialogInterface.BUTTON_NEGATIVE)
              {
                  Toast.makeText(SingleChoiceItemsTest.this, "你沒有選擇任何東西",
                          Toast.LENGTH_LONG);
              }
           }
       }
    }
}

 

彈出一個下拉單選框

\


button3.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setIcon(R.drawable.ic_launcher);
                builder.setTitle("請選擇性別");
                final String[] sex = {"男", "女", "未知性別"};
                //    設置一個單項選擇下拉框
                /**
                 * 第一個參數指定我們要顯示的一組下拉單選框的數據集合
                 * 第二個參數代表索引,指定默認哪一個單選框被勾選上,1表示默認'女' 會被勾選上
                 * 第三個參數給每一個單選項綁定一個監聽器
                 */
                builder.setSingleChoiceItems(sex, 1, new DialogInterface.OnClickListener()
                {
                    @Override
                    public void onClick(DialogInterface dialog, int which)
                    {
                        Toast.makeText(MainActivity.this, "性別為:" + sex[which], Toast.LENGTH_SHORT).show();
                    }
                });
                builder.setPositiveButton("確定", new DialogInterface.OnClickListener()
                {
                    @Override
                    public void onClick(DialogInterface dialog, int which)
                    {
                        
                    }
                });
                builder.setNegativeButton("取消", new DialogInterface.OnClickListener()
                {
                    @Override
                    public void onClick(DialogInterface dialog, int which)
                    {
                        
                    }
                });
                builder.show();
            }
        });
注意:在彈出下拉單選框時,當我們選中一個選項,對話框是不會消失的,我們需要點擊action button才能讓對話框消失。

\

彈出一個下拉多選框

\

button4.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setIcon(R.drawable.ic_launcher);
                builder.setTitle("愛好");
                final String[] hobbies = {"籃球", "足球", "網球", "斯諾克"};
                //    設置一個單項選擇下拉框
                /**
                 * 第一個參數指定我們要顯示的一組下拉多選框的數據集合
                 * 第二個參數代表哪幾個選項被選擇,如果是null,則表示一個都不選擇,如果希望指定哪一個多選選項框被選擇,
                 * 需要傳遞一個boolean[]數組進去,其長度要和第一個參數的長度相同,例如 {true, false, false, true};
                 * 第三個參數給每一個多選項綁定一個監聽器
                 */
                builder.setMultiChoiceItems(hobbies, null, new DialogInterface.OnMultiChoiceClickListener()
                {
                    StringBuffer sb = new StringBuffer(100);
                    @Override
                    public void onClick(DialogInterface dialog, int which, boolean isChecked)
                    {
                        if(isChecked)
                        {
                            sb.append(hobbies[which] + ", ");
                        }
                        Toast.makeText(MainActivity.this, "愛好為:" + sb.toString(), Toast.LENGTH_SHORT).show();
                    }
                });
                builder.setPositiveButton("確定", new DialogInterface.OnClickListener()
                {
                    @Override
                    public void onClick(DialogInterface dialog, int which)
                    {
                        
                    }
                });
                builder.setNegativeButton("取消", new DialogInterface.OnClickListener()
                {
                    @Override
                    public void onClick(DialogInterface dialog, int which)
                    {
                        
                    }
                });
                builder.show();
            }
        });

同樣,對於下拉多選框,當我們選中其中一個選項時,對話框是不會消失的,只有點擊了action button才會消失。

\


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved