国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android UI系列-----Dialog對話框示例

2019-12-12 04:08:04
字體:
來源:轉載
供稿:網友

在Android開發當中,在界面上彈出一個Dialog對話框使我們經常需要做的,本篇隨筆將詳細的講解Dialog對話框這個概念,包括定義不同樣式的對話框。

一、Dialog

我們首先來看看android官方文檔對Dialog的介紹

A dialog is a small window that prompts the user to make a decision or enter additional information. A dialog does not fill the screen and is normally used for modal events that require users to take an action before they can proceed.

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

今天我們重點要來了解的就是AlertDialog對話框,我們看到,AlertDialog是Dialog的一個直接子類。

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

這里借用android的官方文檔提供的一個圖來看看AlertDialog框的組成:

①區域1那里就是定義彈出框的頭部信息,包括標題名或者是一個圖標。

②區域2那里是AlertDialog對話框的content部分,在這里我們可以設置一些message信息,或者是定義一組選擇框,還可以定義我們自己的布局彈出框。

③區域3那里使我們的Action Buttons部分,這里我們可以定義我們的操作按鈕。

說到Action Buttons這里要特別注意一下:

在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表示點擊的是忽略按鈕。

2.下拉列表彈出框

關鍵代碼如下:

button2.setOnClickListener(new OnClickListener()    {      @Override      public void onClick(View arg0)      {        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);        builder.setIcon(R.drawable.ic_launcher);        builder.setTitle("選擇一個城市");        //  指定下拉列表的顯示數據        final String[] cities = {"廣州", "上海", "北京", "香港", "澳門"};        //  設置一個下拉的列表選擇項        builder.setItems(cities, new DialogInterface.OnClickListener()        {          @Override          public void onClick(DialogInterface dialog, int which)          {            Toast.makeText(MainActivity.this, "選擇的城市為:" + cities[which], Toast.LENGTH_SHORT).show();          }        });        builder.show();      }    });

在這里我們通過 setItems(CharSequence[] items, DialogInterface.OnClickListener listener) 方法來設置我們的一個下拉列表框。注意:因為下拉列表框或者是下拉多選框這些都是顯示在Content中的,所以message和下拉列表框這些是不能夠同時存在的。

我們也可以給其綁定一個DialogInterface.OnClickListener監聽器,當選中一個選項時,對話框就會消失掉。這里的which代表的是下拉列表的每個選項的索引,通過這個我們可以輕松得到用戶選中的是哪一個選項。

3.彈出一個下拉單選框

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才能讓對話框消失。

4.彈出一個下拉多選框

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();      }    });

我們看到在設置下拉多選框時使用的是setMultiChoiceItems方法,其各個參數的含義,在上面代碼中已經闡述了。
同樣,對于下拉多選框,當我們選中其中一個選項時,對話框是不會消失的,只有點擊了action button才會消失。

5.自定義彈出對話框

對于自定義彈出對話框,我們就需要自己指定一個自定義的布局文件了,我們就給出一個最簡單的輸入用戶名和密碼的兩個EditText:

dialog.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent" >    <EditText     android:id="@+id/username"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:hint="username"/>    <EditText    android:id="@+id/password"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_below="@id/username"    android:hint="password"    android:inputType="textPassword"/></RelativeLayout>

關鍵代碼: 

button5.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("請輸入用戶名和密碼");        //  通過LayoutInflater來加載一個xml的布局文件作為一個View對象        View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null);        //  設置我們自己定義的布局文件作為彈出框的Content        builder.setView(view);                final EditText username = (EditText)view.findViewById(R.id.username);        final EditText password = (EditText)view.findViewById(R.id.password);                builder.setPositiveButton("確定", new DialogInterface.OnClickListener()        {          @Override          public void onClick(DialogInterface dialog, int which)          {            String a = username.getText().toString().trim();            String b = password.getText().toString().trim();            //  將輸入的用戶名和密碼打印出來            Toast.makeText(MainActivity.this, "用戶名: " + a + ", 密碼: " + b, Toast.LENGTH_SHORT).show();          }         });        builder.setNegativeButton("取消", new DialogInterface.OnClickListener()        {          @Override          public void onClick(DialogInterface dialog, int which)          {                      }        });        builder.show();      }    });

我們看到,通過自定義彈出框,我們首先需要寫一個xml的布局文件,然后在里面定義我們的布局,我們不需要在布局文件里定義Button按鈕,可以通過 AlertDialog.Builder 來設置 action buttons。

通過 View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null); 我們可以將我們的布局文件加載進來,得到一個View對象,然后通過 AlertDialog.Builder 的setView方法來設置我們的自定義彈出框

 

總結:到這里,基本上將AlertDialog詳細的講解完了,本篇隨筆主要講解了Dialog彈出框的基本概念以及詳細講解了AlertDialog這個彈出框,包括定義一個基本的彈出警告框、下拉列表框、下拉多選框等等。后續的隨筆將會繼續記錄學習Android的點點滴滴。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绥化市| 郧西县| 龙井市| 彰化市| 长乐市| 莲花县| 佳木斯市| 屏山县| 亚东县| 耿马| 馆陶县| 昌宁县| 凤阳县| 灌阳县| 沅陵县| 古蔺县| 五指山市| 潍坊市| 湛江市| 黑山县| 佛山市| 佛冈县| 平罗县| 阿坝| 云南省| 荔波县| 汨罗市| 筠连县| 保定市| 陇南市| 板桥市| 同心县| 龙游县| 云霄县| 大同县| 余干县| 卫辉市| 宁阳县| 商水县| 葫芦岛市| 宁阳县|