Android中創建自己的對話框

Activities提供了一種方便管理的創建、保存、回復的對話框機制,例如?onCreateDialog(int),?onPrepareDialog(int, Dialog),?showDialog(int),?dismissDialog(int)等方法,如果使用這些方法的話,Activity將通過getOwnerActivity()方法返回該Activity管理的對話框(dialog).

?

  onCreateDialog(int):當你使用這個回調函數時,Android系統會有效的設置這個Activity為每個對話框的所有者,從而自動管理每個對話框的狀態并掛靠到Activity上。這樣,每個對話框繼承這個Activity的特定屬性。比如,當一個對話框打開時,菜單鍵顯示為這個Activity定義的選項菜單,音量鍵修改Activity使用的音頻流。

?

  showDialog(int):?當你想要顯示一個對話框時,調用showDialog(int id) 方法并傳遞一個唯一標識這個對話框的整數。當對話框第一次被請求時,Android從你的Activity中調用onCreateDialog(int id),你應該在這里初始化這個對話框Dialog。這個回調方法被傳以和showDialog(int id)相同的ID。當你創建這個對話框后,在Activity的最后返回這個對象。

?

  onPrepareDialog(int, Dialog):在對話框被顯示之前,Android還調用了可選的回調函數onPrepareDialog(int id, Dialog). 如果你想在每一次對話框被打開時改變它的任何屬性,你可以定義這個方法。這個方法在每次打開對話框時被調用,而onCreateDialog(int) 僅在對話框第一次打開時被調用。如果你不定義onPrepareDialog(),那么這個對話框將保持和上次打開時一樣。這個方法也被傳遞以對話框的ID,和在onCreateDialog()中創建的對話框對象。

?

  dismissDialog(int):當你準備關閉對話框時,你可以通過對這個對話框調用dismiss()來消除它。如果需要,你還可以從這個Activity中調用dismissDialog(int id) 方法,這實際上將為你對這個對話框調用dismiss() 方法。 如果你想使用onCreateDialog(int id) 方法來管理你對話框的狀態(就如同在前面的章節討論的那樣),然后每次你的對話框消除的時候,這個對話框對象的狀態將由該Activity保留。如果你決定不再需要這個對象或者清除該狀態是重要的,那么你應該調用removeDialog(int id)。這將刪除任何內部對象引用而且如果這個對話框正在顯示,它將被消除。

?

下面是幾種對話框的效果

圖1

圖2

圖3

圖4

圖5

圖6

圖7

  圖1效果:該效果是當按返回按鈕時彈出一個提示,來確保無誤操作,采用常見的對話框樣式。

     代碼:

  創建對話框方法dialog()

protected void dialog() {
??AlertDialog.Builder builder = new Builder(Main.this);
??builder.setMessage("確認退出嗎?");

??builder.setTitle("提示");

??builder.setPositiveButton("確認", new OnClickListener() {

???@Override
???public void onClick(DialogInterface dialog, int which) {
????dialog.dismiss();

????Main.this.finish();
???}
??});

??builder.setNegativeButton("取消", new OnClickListener() {

???@Override
???public void onClick(DialogInterface dialog, int which) {
????dialog.dismiss();
???}
??});

??builder.create().show();
?}

?

在onKeyDown(int keyCode, KeyEvent event)方法中調用此方法

public boolean onKeyDown(int keyCode, KeyEvent event) {
??if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
???dialog();
??}
??return false;
?}

  圖2效果:改變了對話框的圖表,添加了三個按鈕

Dialog dialog = new AlertDialog.Builder(this).setIcon(
?????android.R.drawable.btn_star).setTitle("喜好調查").setMessage(
?????"你喜歡李連杰的電影嗎?").setPositiveButton("很喜歡",
?????new OnClickListener() {

??????@Override
??????public void onClick(DialogInterface dialog, int which) {
???????// TODO Auto-generated method stub
???????Toast.makeText(Main.this, "我很喜歡他的電影。",
?????????Toast.LENGTH_LONG).show();
??????}
?????}).setNegativeButton("不喜歡", new OnClickListener() {

????@Override
????public void onClick(DialogInterface dialog, int which) {
?????// TODO Auto-generated method stub
?????Toast.makeText(Main.this, "我不喜歡他的電影。", Toast.LENGTH_LONG)
???????.show();
????}
???}).setNeutralButton("一般", new OnClickListener() {

????@Override
????public void onClick(DialogInterface dialog, int which) {
?????// TODO Auto-generated method stub
?????Toast.makeText(Main.this, "談不上喜歡不喜歡。", Toast.LENGTH_LONG)
???????.show();
????}
???}).create();

???dialog.show();

?

圖3效果:信息內容是一個簡單的View類型

new AlertDialog.Builder(this).setTitle("請輸入").setIcon(
?????android.R.drawable.ic_dialog_info).setView(
?????new EditText(this)).setPositiveButton("確定", null)
?????.setNegativeButton("取消", null).show();

?

圖4效果:信息內容是一組單選框

new AlertDialog.Builder(this).setTitle("復選框").setMultiChoiceItems(
?????new String[] { "Item1", "Item2" }, null, null)
?????.setPositiveButton("確定", null)
?????.setNegativeButton("取消", null).show();

?

圖5效果:信息內容是一組多選框

new AlertDialog.Builder(this).setTitle("單選框").setIcon(
?????android.R.drawable.ic_dialog_info).setSingleChoiceItems(
?????new String[] { "Item1", "Item2" }, 0,
?????new DialogInterface.OnClickListener() {
??????public void onClick(DialogInterface dialog, int which) {
???????dialog.dismiss();
??????}
?????}).setNegativeButton("取消", null).show();

?

圖6效果:信息內容是一組簡單列表項

new AlertDialog.Builder(this).setTitle("列表框").setItems(
?????new String[] { "Item1", "Item2" }, null).setNegativeButton(
?????"確定", null).show();

?

圖7效果:信息內容是一個自定義的布局

1.布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
?android:layout_height="wrap_content" android:layout_width="wrap_content"
?android:background="#ffffffff" android:orientation="horizontal"
?android:id="@+id/dialog">
?<TextView android:layout_height="wrap_content"
?? android:layout_width="wrap_content"
??android:id="@+id/tvname" android:text="姓名:" />
?<EditText android:layout_height="wrap_content"
??android:layout_width="wrap_content" android:id="@+id/etname" android:minWidth="100dip"/>

</LinearLayout>

2.調用代碼

LayoutInflater inflater = getLayoutInflater();
???View layout = inflater.inflate(R.layout.dialog,
?????(ViewGroup) findViewById(R.id.dialog));

???new AlertDialog.Builder(this).setTitle("自定義布局").setView(layout)
?????.setPositiveButton("確定", null)
?????.setNegativeButton("取消", null).show();

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457025.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457025.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457025.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11

搭建Django2.0Python3MySQL5時同步數據庫時報錯&#xff1a; django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None 解決辦法&#xff1a; 找到Python安裝路勁下的Python36-32\Lib\site-packages\django\db\backend…

一件很好笑的事情

我是一個比較習慣努力學習的人&#xff0c; 我也會去學習各種可能與我有交集的知識&#xff0c; 就在這幾天&#xff0c;我看到以前的一個android網絡培訓學校開辦了C/C的培訓&#xff0c;這是挺好的事&#xff0c; 但是看他們的文件&#xff0c;我就奇怪了。 這份文件&#xf…

c語言實現循環鏈表,c語言實現循環鏈表的基本操作

循環鏈表和單鏈表其實區別不大,差別僅在于算法中的循環條件不是p或者p->next,而是是否等于頭指針。下面這個例子簡單的實現了循環鏈表的基本操作,其中插入和刪除只是完成了主要的部分,沒有判斷。#include#includestruct Data{char name;int age;};struct CirList{Data *data…

關于Eclipes的Logcat無法打印消息的解決辦法

轉自&#xff1a;http://blog.csdn.net/harry211/article/details/8453532 調試程序需要打印一些消息出來&#xff0c;logcat不好用的話就很麻煩了。這個問題折騰了好久&#xff0c;為啥就是不出來呢&#xff1f; 上網找了很多解決辦法&#xff1a; 重啟eclipse 重啟adb 重啟…

17:文字排版

17:文字排版 查看提交統計提問總時間限制: 1000ms內存限制: 65536kB描述給一段英文短文&#xff0c;單詞之間以空格分隔&#xff08;每個單詞包括其前后緊鄰的標點符號&#xff09;。請將短文重新排版&#xff0c;要求如下&#xff1a; 每行不超過80個字符&#xff1b;每個單詞…

解決AttributeError: 'str' object has no attribute 'decode'報錯問題

順著報錯文件點進去&#xff0c;找到query query.decode(errors‘replace’) 將decode修改為encode即可

c語言指針數組課件,C語言指針與數組教程課件.ppt

C語言指針與數組教程;教學要求;本章主要內容;引子;#include void swap ( int x, int y ) { printf("調用時&#xff1a;x地址為&#xff1a;%p, 值為&#xff1a;%d\n",&x,x); printf("調用時&#xff1a;y地址為&#xff1a;%p, 值為&#xff1a;%d\n"…

Android控制EditText的焦點

在項目中&#xff0c;一進入一個頁面, EditText默認就會自動獲取焦點。 那么如何取消這個默認行為呢&#xff1f; 在網上找了好久&#xff0c;有點 監聽軟鍵盤事件&#xff0c;有點 調用 clearFouse()方法&#xff0c;但是測試了都沒有&#xff01; xml中也找不到相應的屬性可以…

解決python中html 代碼被注釋掉 依舊被解釋導致報錯ERROR:tornado.access:500 GET /home (xxx.xxx.xxx.xxx)

ERROR:tornado.access:500 GET /home (xxx.xxx.xxx.xxx) 注釋的是Html代碼&#xff0c;是給瀏覽器看的。 Html里的代碼還是要執行。注釋python代碼用{# #}

springMvc 傳子 bean 中有bean

2019獨角獸企業重金招聘Python工程師標準>>> bean 類型 如下 1. json 字符串 $.ajax({ url :${ctx}/test/testData/f1?bookjava, type: post, dataType : "json", con…

通過rsync搭建一個遠程備份系統(二)

Rsyncinotify實時備份數據 rsync在同步數據的時候&#xff0c;需要掃描所有文件后進行對比&#xff0c;然后進行差量傳輸&#xff0c;如果文件達到了百萬或者千萬級別以上是&#xff0c;掃描文件的時間也很長&#xff0c;而如果只有少量的文件變更了&#xff0c;那么此時rsync是…

C語言掃地雷游戲的題目簡介,C語言程序設計課程設計(論文)-掃地雷游戲.doc...

C語言程序設計課程設計(論文)-掃地雷游戲遼 寧 工 業 大 學C語言程序設計 課程設計(論文)題目&#xff1a; 掃地雷游戲院(系)&#xff1a; 軟件學院專業班級: 電子商務091班學 號:學生姓名&#xff1a;指導教師&#xff1a;教師職稱&#xff1a; 助 教起止時間&#xff1a;2009…

關于地圖中軌跡的平滑移動的實現

很多人應該都有類似的經歷&#xff0c;叫完車&#xff0c;想看看車離我還有多遠距離&#xff1f;但手機屏幕上的車不是一動不動&#xff0c;就是一跳一跳的漂移。 目前市面上大多產品“軌跡平滑移動”做的并不好。 市面上只有快的打車和一號專車實現了平滑移動&#xff0c;那…

查看centos中的用戶和用戶組

1、用戶列表文件&#xff1a;/etc/passwd/ 2、用戶組列表文件&#xff1a;/etc/group 3、查看系統中有哪些用戶&#xff1a; cut -d : -f 1 /etc/passwd 4、查看可以登錄系統的用戶&#xff1a; cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1 5、查看用戶操作…

【Android】關于參數的傳遞問題

最近遇到了一個bug&#xff0c;在debug條件下可以看出更改后的值&#xff0c;但是在最終顯示的結果中確實沒有更改的值。經過很多次的調試后&#xff0c;才發現最后的原因竟然是因為參數傳遞的時候并沒有將更改后的值傳遞給最終變量。 這時才意識到java中只存在值傳遞&#xff…

android按鈕響應事件嗎,Android 按鈕響應事件的幾種方式

目錄1.在布局中指定onClick屬性布局代碼android:id"id/btn1"android:layout_width"wrap_content"android:layout_height"wrap_content"android:text"button1"android:onClick"click"/>android:id"id/btn2"andr…

Android 開源優秀 Library 推薦

之后的每月會推薦一些優秀的開源 Android libraries&#xff0c;不僅僅是學習&#xff0c;也可以方便的使用到項目中&#xff0c;避免重復的造輪子。 PageIndicatorView 如果你需要在 ViewPager 中指明當前處于哪個畫面中&#xff0c;PageIndicatorView是你的不二選擇。而且真…

Vue2.0王者榮耀助手

vue-gok vue2.0-王者榮耀助手 項目使用的是帶玩游戲平臺提供的API&#xff0c;由于騰訊公司王者榮耀游戲關閉了查看其它人的戰績功能&#xff0c;帶玩平臺受其影響&#xff0c;已將API暫時關閉&#xff0c;所以無法獲得穩定的 DAIWAN-API-TOKEN ,所以會出現DAIWAN-API-TOKEN令…

訪問對象的屬性和方法

class Person(object):name ""age 0height 0weight 0def run(self):print("run")def eat(self,food):print("eat"food)def openDoor(self):print("我已經打開了門")def fillEle(self):print("我已經把大象裝進了冰箱")de…

Android mc怎么和win10聯機,我的世界手機版/win10版聯機完美互通方法

我的世界手機版玩家想要更加方便的操作&#xff1f;0.12.1更新之后&#xff0c;你除了能使用手柄進行方便的操作之外&#xff0c;現在你能完全擺脫小屏幕蹩腳的操作了&#xff01;win10版在9月9日進行了重大更新&#xff0c;我們能直接使用win10的電腦玩我的世界&#xff0c;而…