htmlbutton獲取焦點(diǎn)(html文本框獲取焦點(diǎn))
介紹AlertDialog對(duì)話框從簡(jiǎn)到繁的多種設(shè)計(jì)方案,從新角度理解UI交互設(shè)計(jì)。
AlertDialog對(duì)話框允許自定義彈出對(duì)話框的內(nèi)容,實(shí)現(xiàn)比之前講解的幾種對(duì)話框更豐富的功能。
01
帶默認(rèn)按鈕的AlertDialog
展開(kāi)全文
程序單擊按鈕后執(zhí)行第17行代碼,調(diào)用自定義方法showAlertDialog。
第22~62行是自定義showAlertDialog方法。調(diào)用AlertDialog的順序是先定義Builder;對(duì)Builder調(diào)用相關(guān)方法設(shè)定屬性;定義默認(rèn)按鈕及單擊監(jiān)聽(tīng)器;調(diào)用Builder的create方法生成AlertDialog;最后調(diào)用AlertDialog的show方法顯示對(duì)話框。
第24行初始化builder,此時(shí)builder擁有AlertDialog對(duì)話框的默認(rèn)主題。
第25行調(diào)用setTitle方法設(shè)置對(duì)話框的標(biāo)題。
第26行調(diào)用setMessage方法設(shè)置對(duì)話框的提示信息。
第27行調(diào)用setIcon方法設(shè)置對(duì)話框圖標(biāo)。
第30~37行添加PositiveButton按鈕,其中setPositiveButton方法的第一個(gè)參數(shù)是按鈕的顯示文本。為了便于閱讀代碼,此按鈕文本盡量采用確定語(yǔ)氣的文字,如“是”“確定”等。第二個(gè)參數(shù)是按鈕的單擊監(jiān)聽(tīng)器。單擊此按鈕將自動(dòng)關(guān)閉對(duì)話框,同時(shí)執(zhí)行第35行代碼,在文本輸入框editText1中顯示信息。變量which是PositiveButton按鈕的int型返回值。
第40~57行以同樣的方式設(shè)置“取消”和“中間”按鈕。不同的Android版本3個(gè)按鈕的外觀和位置會(huì)有差異。每個(gè)對(duì)話框可以設(shè)置1~3個(gè)對(duì)話框默認(rèn)按鈕,也可以不設(shè)置按鈕。
第58行的作用是單擊對(duì)話框以外的區(qū)域,對(duì)話框仍然顯示在最上層。默認(rèn)值為true,單擊對(duì)話框以外的區(qū)域,對(duì)話框?qū)⒈徽趽酢?/p>
第59行調(diào)用builder的create方法生成alertDialog1對(duì)話框。
第60行調(diào)用alertDialog1的show方法顯示對(duì)話框。
帶默認(rèn)按鈕的AlertDialog運(yùn)行結(jié)果如圖4-84和圖4-85所示。
■ 圖4-84彈出帶默認(rèn)按鈕的AlertDialog
■ 圖4-85返回對(duì)話框按鈕信息
02
列表的AlertDialog
AlertDialog除了默認(rèn)主題的對(duì)話框形式外,還支持多種類(lèi)型的對(duì)話框。本案例講解列表風(fēng)格的AlertDialog。
本案例的大多數(shù)代碼與4.24.1節(jié)案例的代碼類(lèi)似,不同點(diǎn)在第29行,setItems方法將對(duì)話框設(shè)置為選項(xiàng)列表風(fēng)格。第一個(gè)參數(shù)是用于填充下拉選項(xiàng)列表的字符串?dāng)?shù)組str,str數(shù)組在第4行定義。第二個(gè)參數(shù)為單擊監(jiān)聽(tīng)器,處理單擊選項(xiàng)后的觸發(fā)事件。
第34行的OnClick方法以變量which(單擊選項(xiàng)列表返回的選中項(xiàng)索引值)為字符串?dāng)?shù)組str的索引,獲取對(duì)應(yīng)選中列表中的文本,并將其傳遞給editText1。
列表風(fēng)格的AlertDialog運(yùn)行結(jié)果如圖4-86和圖4-87所示。
■ 圖4-86彈出列表風(fēng)格的AlertDialog
■ 圖4-87返回列表風(fēng)格的AlertDialog的選擇信息
03
單選的AlertDialog
單選的AlertDialog是指彈出的對(duì)話框顯示單選按鈕風(fēng)格的AlertDialog。
第4行定義用于單選列表的字符串?dāng)?shù)組str。
第5行的變量num用于記錄單選風(fēng)格對(duì)話框中選中項(xiàng)的索引值。
關(guān)鍵代碼在第31行,setSingleChoiceItems方法將對(duì)話框設(shè)置為單選按鈕風(fēng)格。其中第二個(gè)參數(shù)checkedItem是設(shè)置單選按鈕列表選中項(xiàng)的索引值,如果是-1則所有單選按鈕都設(shè)置為未選。
第34行的變量which是單選按鈕列表的索引值,也是選中項(xiàng)對(duì)應(yīng)字符串?dāng)?shù)組str的索引值。
第45行的變量which是AlertDialog對(duì)話框中按鈕被單擊時(shí)返回按鈕所對(duì)應(yīng)的int型數(shù)值,與第34行的which含義是不同的。
如果去掉第38行的注釋?zhuān)趶棾龅膶?duì)話框中選中單選項(xiàng)后,cancel方法將關(guān)閉對(duì)話框而無(wú)須再單擊“確定”按鈕,也就不會(huì)執(zhí)行第42~50行的代碼。
單選的AlertDialog運(yùn)行結(jié)果如圖4-88所示。
■ 圖4-88單選的AlertDialog運(yùn)行結(jié)果
04
復(fù)選的AlertDialog
復(fù)選的AlertDialog是指彈出的對(duì)話框顯示復(fù)選框風(fēng)格的AlertDialog。
第4行定義用于復(fù)選框列表的字符串?dāng)?shù)組str。
第5行的布爾型數(shù)組flags定義了str數(shù)組在復(fù)選框列表中的選中狀態(tài),true為選中。flags數(shù)組的長(zhǎng)度應(yīng)與str數(shù)組長(zhǎng)度相同。如果flags數(shù)組長(zhǎng)度小于str數(shù)組長(zhǎng)度,程序運(yùn)行到第30行綁定兩個(gè)數(shù)組到builder時(shí)會(huì)出錯(cuò)。如果flags數(shù)組長(zhǎng)度大于str數(shù)組長(zhǎng)度,程序運(yùn)行到第45行取flags數(shù)組的長(zhǎng)度,執(zhí)行到第48行可能會(huì)因數(shù)組索引超出str數(shù)組范圍而出錯(cuò),只要將第45行的flags.length改成str.length程序就能正常運(yùn)行。
第30行的setMultiChoiceItems方法將AlertDialog設(shè)置為復(fù)選框列表。
第35行將復(fù)選項(xiàng)的變動(dòng)值(true或false)同步到flags數(shù)組的對(duì)應(yīng)項(xiàng)。
第45行使用for循環(huán)遍歷數(shù)組flags,狀態(tài)為true的索引項(xiàng)返回str數(shù)組的對(duì)應(yīng)值。
第50行將對(duì)話框的返回結(jié)果傳遞給editText1。
第53~54行調(diào)用builder的create方法生成alertDialog1,再調(diào)用show方法顯示對(duì)話框。
05
自定義控件
目前為止已經(jīng)介紹了多種對(duì)話框,這些對(duì)話框的內(nèi)置控件都是定制好的。本案例講解自定義對(duì)話框中的控件。為便于講解,對(duì)話框中的控件只加入EditText和Button,讀者理解設(shè)計(jì)方式后可自行添加所需控件。
第17~19行通過(guò)自定義showAlertDialog方法的不同參數(shù)調(diào)用不同形式的自定義對(duì)話框。
當(dāng)參數(shù)為10時(shí)執(zhí)行第29行開(kāi)始的代碼,實(shí)現(xiàn)動(dòng)態(tài)添加控件,常用于對(duì)布局要求不高的場(chǎng)景。第30行使用EditText的構(gòu)造方法生成一個(gè)文本輸入框editTextName。第31行將生成的editTextName文本輸入框添加到builder中。第32行添加對(duì)話框的標(biāo)題。第33行添加“確定”按鈕,按鈕的單擊監(jiān)聽(tīng)器將對(duì)話框中的editTextName內(nèi)容傳回main.xml布局文件中的editText1中。
當(dāng)參數(shù)為20時(shí)執(zhí)行第42行開(kāi)始的代碼。此時(shí)調(diào)用已經(jīng)設(shè)計(jì)好的布局文件login.xml。第43行聲明LayoutInflater類(lèi)型的變量inflater20。第44行使用inflate方法將login.xml中名為linearLayoutLogin的線性布局作為View填充到viewLogin20。第45行是將builder的一系列方法放在一行中連續(xù)調(diào)用。相關(guān)按鈕的監(jiān)聽(tīng)器都設(shè)置為null,單擊這些按鈕就只能執(zhí)行默認(rèn)的關(guān)閉對(duì)話框操作。
當(dāng)參數(shù)為30時(shí)執(zhí)行第47行開(kāi)始的代碼,是對(duì)方法一的完善,可以返回文本輸入框中的文字內(nèi)容。實(shí)現(xiàn)的方式是重寫(xiě)按鈕單擊監(jiān)聽(tīng)器代碼。在第57行的findViewById方法前加了viewLogin30限定。第49行viewLogin30對(duì)應(yīng)的是login.xml布局文件的linearLayoutLogin。如果沒(méi)有viewLogin30前綴,查找R.id.editTextName從main.xml中查詢(xún),找不到程序就會(huì)出錯(cuò)退出。如果兩個(gè)文件中控件重名,沒(méi)有viewLogin30前綴的findViewById方法取回的就是main.xml布局文件中的控件。
帶自定義控件AlertDialog運(yùn)行結(jié)果如圖4-89和圖4-90所示。
■ 圖4-89彈出帶自定義控件AlertDialog
■ 圖4-90返回帶自定義控件AlertDialog信息
【注】
Spinner、AutoCompleteTextView和AlertDialog都支持類(lèi)似的彈出框功能,使用時(shí)注意各自的優(yōu)缺點(diǎn)和使用場(chǎng)景。
實(shí)例講解
Android項(xiàng)目開(kāi)發(fā)基礎(chǔ)與實(shí)戰(zhàn)
精彩回顧
教學(xué)輔助系統(tǒng)使用
Android項(xiàng)目開(kāi)發(fā)相關(guān)Java基本概念
約束布局
TextView控件
Button控件
RadioButton控件
精彩預(yù)告
Activity
Broadcast
數(shù)據(jù)庫(kù)調(diào)試
?
06
視頻講解
掃碼即可觀看視頻,限時(shí)免費(fèi)3天
07
參考書(shū)籍
《Android項(xiàng)目開(kāi)發(fā)基礎(chǔ)與實(shí)戰(zhàn)(微課視頻版)》
作者:夏江
定價(jià):59.9元
內(nèi)容簡(jiǎn)介
本書(shū)結(jié)合作者多年講授“Android應(yīng)用軟件開(kāi)發(fā)”課程的教學(xué)經(jīng)驗(yàn),融入Android開(kāi)發(fā)領(lǐng)域新技術(shù),較為全面地介紹了Android應(yīng)用軟件開(kāi)發(fā)的相關(guān)知識(shí)點(diǎn)和開(kāi)發(fā)技巧。全書(shū)共分5章,分別介紹了Android開(kāi)發(fā)環(huán)境、Android項(xiàng)目及Java基本概念、Android常用布局、Android常用控件和其他常用編程技術(shù)。本書(shū)相關(guān)案例以Android Studio為開(kāi)發(fā)環(huán)境,盡可能使用最新版本SDK命令替代棄用命令,并對(duì)控件的版本變化做大致的介紹。本書(shū)全面考慮了本科教學(xué)的特點(diǎn),結(jié)合作者開(kāi)發(fā)的案例庫(kù)教學(xué)輔助系統(tǒng),通過(guò)精心設(shè)計(jì)的案例和詳盡的講解、演示,讓讀者感受體驗(yàn)式教學(xué)的魅力。本書(shū)適合Android Studio開(kāi)發(fā)人員、Android的入門(mén)讀者、高等學(xué)校學(xué)生使用,還可以作為高等院校、相關(guān)培訓(xùn)機(jī)構(gòu)的教學(xué)用書(shū)。
08
精彩推薦
微信小程序游戲開(kāi)發(fā)│猜數(shù)字小游戲(附源碼+視頻)
Flink編程基礎(chǔ)│Scala編程初級(jí)實(shí)踐
Flink編程基礎(chǔ)│FlinkCEP編程實(shí)踐
Flink編程基礎(chǔ)│DataStream API編程實(shí)踐
Flink編程基礎(chǔ)│DataSet API編程實(shí)踐
數(shù) 據(jù)分析實(shí)戰(zhàn)│客戶(hù)價(jià)值分析
數(shù)據(jù)分析實(shí)戰(zhàn)│價(jià)格預(yù)測(cè)挑戰(zhàn)
數(shù)據(jù)分析實(shí)戰(zhàn)│時(shí)間序列預(yù)測(cè)
數(shù)據(jù)分析實(shí)戰(zhàn)│KaggleTitanic生存預(yù)測(cè)
微信小程序游戲開(kāi)發(fā)│猜數(shù)字小游戲(附源碼+視頻)
Flink編程基礎(chǔ)│Scala編程初級(jí)實(shí)踐
Flink編程基礎(chǔ)│FlinkCEP編程實(shí)踐
Flink編程基礎(chǔ)│DataStream API編程實(shí)踐
Flink編程基礎(chǔ)│DataSet API編程實(shí)踐
數(shù) 據(jù)分析實(shí)戰(zhàn)│客戶(hù)價(jià)值分析
數(shù)據(jù)分析實(shí)戰(zhàn)│價(jià)格預(yù)測(cè)挑戰(zhàn)
數(shù)據(jù)分析實(shí)戰(zhàn)│時(shí)間序列預(yù)測(cè)
數(shù)據(jù)分析實(shí)戰(zhàn)│KaggleTitanic生存預(yù)測(cè)
掃描二維碼推送至手機(jī)訪問(wèn)。
版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。