亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Android開(kāi)發(fā)指南-用戶(hù)界面-對(duì)話框

系統(tǒng) 2984 0

創(chuàng)建對(duì)話框 Creating Dialogs

對(duì)話框通常是一個(gè)顯示在當(dāng)前活動(dòng)前面的小窗口。下面的活動(dòng)失去焦點(diǎn)而由對(duì)話框接受所有的用戶(hù)交互。對(duì)話框通常被用來(lái)當(dāng)做通知或者運(yùn)行中的應(yīng)用程序相關(guān)的短暫活動(dòng)。

Android API 支持下面的對(duì)話框?qū)ο箢?lèi)型:

警告對(duì)話框 AlertDialog

這個(gè)對(duì)話框管理 0 1 2 ,或 3 個(gè)按鈕,和 / 或一個(gè)可包含復(fù)選框和單選按鈕的可選項(xiàng)列表。這個(gè)警告對(duì)話框能夠組建大多數(shù)用戶(hù)界面而且是推薦使用的對(duì)話框類(lèi)型。請(qǐng)查看下面的創(chuàng)建一個(gè)警告對(duì)話框 Creating an AlertDialog

進(jìn)度對(duì)話框 ProgressDialog

用來(lái)顯示一個(gè)進(jìn)度輪或進(jìn)度條。因此它是警告對(duì)話框的擴(kuò)展,它也支持按鈕。請(qǐng)查看下面的 Creating a ProgressDialog

日期選擇對(duì)話框 DatePickerDialog

一個(gè)允許用戶(hù)選擇日期的對(duì)話框。請(qǐng)查看 Hello DatePicker 指南。

時(shí)間選擇對(duì)話框 TimePickerDialog

一個(gè)允許用戶(hù)選擇時(shí)間的對(duì)話框。請(qǐng)查看 Hello TimePicker 指南 .

如果你想定制你自己的對(duì)話框,你可以在基礎(chǔ)對(duì)話框?qū)ο蠡蛉魏紊厦媪信e的子類(lèi)對(duì)話框上進(jìn)行擴(kuò)展并定義一個(gè)新的布局。請(qǐng)查看下面的創(chuàng)建自定義對(duì)話框 Creating a Custom Dialog 章節(jié)。

顯示對(duì)話框 Showing a Dialog

對(duì)話框經(jīng)常作為活動(dòng) Activity 的一部分來(lái)創(chuàng)建和顯示。你通常應(yīng)該從活動(dòng)的 onCreateDialog(int) 回調(diào)方法里創(chuàng)建對(duì)話框。當(dāng)你使用這個(gè)回調(diào)函數(shù)時(shí), Android 系統(tǒng)會(huì)有效的設(shè)置這個(gè)活動(dòng)為每個(gè)對(duì)話框的所有者,從而自動(dòng)管理每個(gè)對(duì)話框的狀態(tài)并掛靠到活動(dòng)上。這樣,每個(gè)對(duì)話框繼承這個(gè)活動(dòng)的特定屬性。比如,當(dāng)一個(gè)對(duì)話框打開(kāi)時(shí),菜單鍵顯示為這個(gè)活動(dòng)定義的選項(xiàng)菜單,音量鍵修改活動(dòng)使用的音頻流。

注意 : 如果你決定在 onCreateDialog() 方法之外創(chuàng)建一個(gè)對(duì)話框,它將不會(huì)被附著到活動(dòng)上。不過(guò),你可以通過(guò) setOwnerActivity(Activity) 把它附著到一個(gè)活動(dòng)上。

當(dāng)你想要顯示一個(gè)對(duì)話框時(shí),調(diào)用 showDialog(int) 方法并傳遞一個(gè)唯一標(biāo)識(shí)這個(gè)對(duì)話框的整數(shù)。

當(dāng)對(duì)話框第一次被請(qǐng)求時(shí), Android 從你的活動(dòng)中調(diào)用 onCreateDialog(int) ,你應(yīng)該在這里初始化這個(gè)對(duì)話框 Dialog 。這個(gè)回調(diào)方法被傳以和 showDialog(int) 相同的 ID 。當(dāng)你創(chuàng)建這個(gè)對(duì)話框后,在方法的最后返回這個(gè)對(duì)象。

在對(duì)話框被顯示之前, Android 還調(diào)用了可選的回調(diào)函數(shù) onPrepareDialog(int, Dialog) . 如果你想在每一次對(duì)話框被打開(kāi)時(shí)改變它的任何屬性,你可以定義這個(gè)方法。這個(gè)方法在每次打開(kāi)對(duì)話框時(shí)被調(diào)用,而 onCreateDialog(int) 僅在對(duì)話框第一次打開(kāi)時(shí)被調(diào)用。如果你不定義 onPrepareDialog() ,那么這個(gè)對(duì)話框?qū)⒈3趾蜕洗未蜷_(kāi)時(shí)一樣。這個(gè)方法也被傳遞以對(duì)話框的 ID ,和在 onCreateDialog() 中創(chuàng)建的對(duì)話框?qū)ο蟆?

定義 onCreateDialog(int) onPrepareDialog(int, Dialog) 回調(diào)函數(shù)的最佳方法是使用一個(gè) switch 語(yǔ)句來(lái)檢查傳遞進(jìn)來(lái)的 id 參數(shù)。每個(gè) case 應(yīng)該檢查一個(gè)唯一的對(duì)話框 ID 然后創(chuàng)建和定義相應(yīng)的對(duì)話框。比如,想象一下一個(gè)游戲使用兩個(gè)不同的對(duì)話框:一個(gè)用來(lái)指示這個(gè)游戲已經(jīng)暫停而另一個(gè)來(lái)指示游戲結(jié)束。首先,為每個(gè)對(duì)話框定義一個(gè)整數(shù):

static final int DIALOG_PAUSED_ID = 0;

static final int DIALOG_GAMEOVER_ID = 1;

然后,為每一個(gè) ID 用一個(gè) switch case 定義這個(gè) onCreateDialog(int) 回調(diào)函數(shù):

protected Dialog onCreateDialog(int id) {

Dialog dialog;

switch(id) {

case DIALOG_PAUSED_ID:

// do the work to define the pause Dialog

break;

case DIALOG_GAMEOVER_ID:

// do the work to define the game over Dialog

break;

default:

dialog = null;

}

return dialog;

}

注意 : 在這個(gè)例子里, case 語(yǔ)句沒(méi)有具體內(nèi)容,因?yàn)檫@超出了本章討論范圍。

當(dāng)是時(shí)候顯示其中之一的對(duì)話框時(shí),使用對(duì)話框 ID 調(diào)用 showDialog(int)

showDialog(DIALOG_PAUSED_ID);

消除對(duì)話框 Dismissing a Dialog

當(dāng)你準(zhǔn)備關(guān)閉對(duì)話框時(shí),你可以通過(guò)對(duì)這個(gè)對(duì)話框調(diào)用 dismiss() 來(lái)消除它。如果需要,你還可以從這個(gè)活動(dòng)中調(diào)用 dismissDialog(int) 方法,這實(shí)際上將為你對(duì)這個(gè)對(duì)話框調(diào)用 dismiss() 方法 .

如果你想使用 onCreateDialog(int) 方法來(lái)管理你對(duì)話框的狀態(tài)(就如同在前面的章節(jié)討論的那樣),然后每次你的對(duì)話框消除的時(shí)候,這個(gè)對(duì)話框?qū)ο蟮臓顟B(tài)將由該活動(dòng)保留。如果你決定不再需要這個(gè)對(duì)象或者清除該狀態(tài)是重要的,那么你應(yīng)該調(diào)用 removeDialog(int) 。這將刪除任何內(nèi)部對(duì)象引用而且如果這個(gè)對(duì)話框正在顯示,它將被消除。

使用消除偵聽(tīng)器 Using dismiss listeners

如果你希望你的應(yīng)用程序在一個(gè)對(duì)話框消亡的時(shí)候執(zhí)行一些流程,那么你應(yīng)該附著一個(gè) on-dismiss 偵聽(tīng)器到對(duì)話框上。

首先定義 DialogInterface.OnDismissListener 接口。這個(gè)接口只有一個(gè)方法, onDismiss(DialogInterface) ,將在對(duì)話框消亡的時(shí)候被調(diào)用。然后簡(jiǎn)單的傳遞你的 OnDismissListener 實(shí)現(xiàn)給 setOnDismissListener()

然而 , 請(qǐng)注意對(duì)話框也可以被 取消 。這是一個(gè)表明對(duì)話框被用戶(hù)顯示取消的特殊情況。這將在用戶(hù)按 返回 按鈕時(shí)發(fā)生,或者這個(gè)對(duì)話框顯示的調(diào)用 cancel() (也許通過(guò)對(duì)話框上的一個(gè) 取消 按鈕)。當(dāng)一個(gè)對(duì)話框被取消時(shí),這個(gè) OnDismissListener 依然會(huì)被通知到,但是如果你希望在對(duì)話框被顯示取消時(shí)被通知到(而不是通常的消除方式),那么你應(yīng)該通過(guò) setOnCancelListener() 注冊(cè)一個(gè) DialogInterface.OnCancelListener

創(chuàng)建警告對(duì)話框 Creating an AlertDialog

一個(gè)警告對(duì)話框是對(duì)話框的擴(kuò)展類(lèi)。它能夠構(gòu)建大多數(shù)對(duì)話框用戶(hù)界面并且是推薦使用的對(duì)話框類(lèi)型。你應(yīng)該在具備如下特性的時(shí)候使用它:

· 一個(gè)標(biāo)題

· 一個(gè)文本消息

· 1 個(gè), 2 個(gè)或 3 個(gè)按鈕

· 一個(gè)可選項(xiàng)列表(可選的復(fù)選框或單選按鈕)

為了創(chuàng)建一個(gè)警告對(duì)話框,使用 AlertDialog.Builder 子類(lèi)。通過(guò) AlertDialog.Builder(Context) 獲取一個(gè)構(gòu)造器然后使用這個(gè)類(lèi)的公共方法來(lái)定義警告對(duì)話框的所有屬性。當(dāng)?shù)玫綐?gòu)造器后,通過(guò) create() . 方法來(lái)獲取警告對(duì)話框?qū)ο蟆?

下面的題目說(shuō)明了如何使用 AlertDialog.Builder 類(lèi)來(lái)定義不同的警告對(duì)話框?qū)傩浴H绻阍? onCreateDialog() 回調(diào)函數(shù)中使用下面的代碼,你可以返回結(jié)果對(duì)話框?qū)ο髞?lái)顯示它。

增加按鈕 Adding buttons

為了創(chuàng)建一個(gè)如右圖所示的包含并行按鈕的警告對(duì)話框,使用 set...Button() 方法:

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setMessage("Are you sure you want to exit?")

.setCancelable(false)

.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int id) {

MyActivity.this.finish();

}

})

.setNegativeButton("No", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int id) {

dialog.cancel();

}

});

AlertDialog alert = builder.create();

首先,為這個(gè)對(duì)話框添加一個(gè)消息 setMessage(CharSequence) 。然后,開(kāi)始函數(shù)鏈并設(shè)置該對(duì)話框?yàn)椴荒苋∠? not cancelable (因此用戶(hù)不能使用返回按鈕關(guān)閉這個(gè)對(duì)話框)。對(duì)每個(gè)按鈕,使用任一 set...Button() 方法,比如 setPositiveButton() ,該方法接受按鈕名稱(chēng)以及一個(gè)定義用戶(hù)選中按鈕后所采取動(dòng)作的 DialogInterface.OnClickListener

注意 : 你僅可以為這個(gè)警告對(duì)話框添加其中一種按鈕類(lèi)型。也就是,你不能包含多個(gè)“確定”按鈕。這限制了可能的按鈕數(shù)目只能是 3 個(gè):確定,中立和否定。這些名字和你按鈕的實(shí)際功能是技術(shù)上無(wú)關(guān)的,但是應(yīng)該可以幫助你記錄做了什么。

增加一個(gè)列表 Adding a list

為了創(chuàng)建一個(gè)帶有可選項(xiàng)列表的警告對(duì)話框,如右邊所示,可使用 setItems() 方法:

final CharSequence[] items = {"Red", "Green", "Blue"};

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setTitle("Pick a color");

builder.setItems(items, new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int item) {

Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();

}

});

AlertDialog alert = builder.create();

首先,用 setTitle(CharSequence) 方法給對(duì)話框添加一個(gè)標(biāo)題。然后,添加用 setItems() 添加一個(gè)可選項(xiàng)列表,該列表接受一組顯示的 items 和一個(gè) DialogInterface.OnClickListener 來(lái)定義用戶(hù)選中按鈕后所采取動(dòng)作。

增加復(fù)選框和單選按鈕

要在對(duì)話框里創(chuàng)建一個(gè)多選項(xiàng)列表( checkboxes )或者單選項(xiàng)( radio buttons ),可分別調(diào)用 setMultiChoiceItems() setSingleChoiceItems() 方法。如果你在 onCreateDialog() 回調(diào)函數(shù)中創(chuàng)建這些可選列表, Android 會(huì)幫你管理列表狀態(tài)。只要這個(gè)活動(dòng)是激活的,對(duì)話框會(huì)記住之前選中的 items ,但如果用戶(hù)退出這個(gè)活動(dòng),用戶(hù)選擇將丟失。

注意 : 為了在用戶(hù)離開(kāi)或暫停這個(gè)活動(dòng)的時(shí)候能夠保存選擇,你必須通過(guò)活動(dòng)生命期 Activity Lifecycle 來(lái)恰當(dāng)?shù)谋4婧突謴?fù)設(shè)置。為了永久保存選項(xiàng),即使活動(dòng)進(jìn)程被完全終止,你需要使用數(shù)據(jù)存儲(chǔ) Data Storage 技術(shù)。

要?jiǎng)?chuàng)建如右邊所示的一個(gè)包含單選項(xiàng)列表的警告對(duì)話框,使用前面例子中相同的代碼,不過(guò)需要把 setItems() 方法替換為 setSingleChoiceItems()

final CharSequence[] items = {"Red", "Green", "Blue"};

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setTitle("Pick a color");

builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int item) {

Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();

}

});

AlertDialog alert = builder.create();

setSingleChoiceItems() 的第二個(gè)參數(shù)是一個(gè) checkedItem 整型數(shù)值,指示了基于 0 的缺省選擇項(xiàng)的位置。“ -1 ”代表不會(huì)有默認(rèn)選擇項(xiàng)。

創(chuàng)建進(jìn)度對(duì)話框 Creating a ProgressDialog

進(jìn)度對(duì)話框 ProgressDialog AlertDialog 類(lèi)的一個(gè)擴(kuò)展,可以為一個(gè)未定義進(jìn)度的任務(wù)顯示一個(gè)旋轉(zhuǎn)輪形狀的進(jìn)度動(dòng)畫(huà),或者為一個(gè)指定進(jìn)度的任務(wù)顯示一個(gè)進(jìn)度條。這個(gè)對(duì)話框也能提供按鈕,比如一個(gè)取消下載的按鈕。

可以簡(jiǎn)單的通過(guò)調(diào)用 ProgressDialog.show() 方法來(lái)顯示一個(gè)進(jìn)度對(duì)話框。比如, 可以很簡(jiǎn)單的得到右邊顯示的進(jìn)度對(duì)話框,而不必通過(guò) onCreateDialog(int) 回調(diào)管理這個(gè)對(duì)話框,如下所示:

ProgressDialog dialog = ProgressDialog.show(MyActivity.this, "",

"Loading. Please wait...", true);

第一個(gè)參數(shù)是應(yīng)用程序上下文 Context ,第二個(gè)是對(duì)話框標(biāo)題(此處為空),第三個(gè)是信息,最后這個(gè)參數(shù)表明進(jìn)度是否是不確定的(這只和創(chuàng)建進(jìn)度條有關(guān),下一章會(huì)有描述)。

進(jìn)度對(duì)話框的缺省類(lèi)型是一個(gè)旋轉(zhuǎn)輪,如果你想創(chuàng)建一個(gè)間隔進(jìn)度,需要更多的代碼,如下章所述。

顯示進(jìn)度條 Showing a progress bar

使用動(dòng)畫(huà)進(jìn)度條顯示進(jìn)度:

1. 用類(lèi)構(gòu)造器初始化進(jìn)度對(duì)話框, ProgressDialog(Context)

2. setProgressStyle(int) 方法設(shè)置進(jìn)度風(fēng)格為 "STYLE_HORIZONTAL" 以及設(shè)置其它屬性,比如消息。

3. 當(dāng)你準(zhǔn)備顯示這個(gè)對(duì)話框時(shí),調(diào)用 show() 或者從 onCreateDialog(int) 回調(diào)中返回 ProgressDialog

4. 你可以通過(guò)調(diào)用 setProgress(int) 設(shè)置當(dāng)前進(jìn)度百分比或者調(diào)用 incrementProgressBy(int) 方法增加進(jìn)度值。

比如,你的設(shè)置可能看起來(lái)像這樣:

ProgressDialog progressDialog;

progressDialog = new ProgressDialog(mContext);

progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

progressDialog.setMessage("Loading...");

progressDialog.setCancelable(false);

設(shè)置很簡(jiǎn)單。大多數(shù)創(chuàng)建代碼也用來(lái)更新進(jìn)度。你可能意識(shí)到創(chuàng)建另外一個(gè)線程來(lái)完成這個(gè)進(jìn)度報(bào)告的工作是有必要的,進(jìn)度通過(guò)一個(gè)對(duì)象返回給活動(dòng)的用戶(hù)界面線程。如果你對(duì)如何通過(guò)一個(gè) Handler 使用另外的線程不熟悉,請(qǐng)參見(jiàn)下面的例子:

Example ProgressDialog with a second thread

這個(gè)例子使用了另外一個(gè)線程來(lái)跟蹤進(jìn)程進(jìn)度(計(jì)數(shù)到 100 )。這個(gè)線程在每次進(jìn)度更新時(shí)通過(guò)一個(gè)句柄 Handler 發(fā)回一條消息 Message 。主活動(dòng)然后更新進(jìn)度對(duì)話框。

package com.example.progressdialog;

import android.app.Activity;

import android.app.Dialog; EN-US

分享到:
評(píng)論

Android開(kāi)發(fā)指南-用戶(hù)界面-對(duì)話框


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲精品 国产 日韩 | 久久香蕉网站 | 色婷婷综合久久久久中文一区二区 | 国产高清视频 | 激情亚洲 | 综合欧美亚洲 | 日本视频中文字幕一区二区 | 综合久色| 国产乱子伦手机在线 | 精品色视频 | 国产成 人 综合 亚洲绿色 | 一区二区福利视频 | 日韩视频欧美视频 | 亚洲不卡在线观看 | 中文字幕不卡在线高清 | 黄色短视频在线播放 | 香蕉大黄香蕉在线观看 | 亚洲不卡视频在线 | 亚洲综合精品成人 | 三中文乱码视频 | 国产福利视频在线播放 | 色婷婷色综合缴情在线 | 中文字幕精品视频在线观看 | 麻豆国产在线不卡一区二区 | 国产高清成人 | 久久久久激情免费观看 | 国产精品久久久久久久小唯西川 | 欧美日韩亚洲成人 | 亚洲国产综合自在线另类 | 一区二区三区网站在线免费线观看 | 香蕉黄色片 | 欧美成人免费 | 日日干日日操日日射 | 久草青草| 欧美亚洲第一页 | 一级毛片看一个 | 免费的黄色小视频 | 在线免费福利 | 亚洲精品国产福利一区二区三区 | 99视频精品全国免费 | 亚洲成人精品 |