生活随笔
收集整理的這篇文章主要介紹了
Android软件开发之盘点所有Dialog对话框大合集(一)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉:http://xys289187120.blog.51cto.com/3361352/657562/
雨松MOMO帶大家盤點Android 中的對話框
今天我用自己寫的一個Demo 和大家詳細介紹一個Android中的對話框的使用技巧。?
?
1.確定取消對話框
對話框中有2個按鈕 通過調用 setPositiveButton 方法 和 setNegativeButton 方法 可以設置按鈕的顯示內容以及按鈕的監聽事件。?
?
我們使用AlerDialog 創建對話框?
AlertDialog.Builder?builder?=?new?AlertDialog.Builder(MainDialog.this);?? 使用builder設置對話框的title button icon 等等?
builder.setIcon(R.drawable.icon); ????????builder.setTitle("你確定要離開嗎?"); ????????builder.setPositiveButton("確定",?new?DialogInterface.OnClickListener()?{ ????????????public?void?onClick(DialogInterface?dialog,?int?whichButton)?{ ????????????????//這里添加點擊確定后的邏輯 ????????????????showDialog("你選擇了確定"); ????????????} ????????}); ????????builder.setNegativeButton("取消",?new?DialogInterface.OnClickListener()?{ ????????????public?void?onClick(DialogInterface?dialog,?int?whichButton)?{ ????????????????//這里添加點擊確定后的邏輯 ????????????????showDialog("你選擇了取消"); ????????????} ????????}); ????????builder.create().show(); ? 這個dialog用于現實onClick后監聽的內容信息?
private?void?showDialog(String?str)?{ ?w?AlertDialog.Builder(MainDialog.this) ??????.setMessage(str) ??????.show(); ?}? 2.多個按鈕信息框 ?
AlertDialog.Builder?builder?=?new?AlertDialog.Builder(MainDialog.this);????????? ?builder.setIcon(R.drawable.icon); ?builder.setTitle("投票"); ?builder.setMessage("您認為什么樣的內容能吸引您?"); ?builder.setPositiveButton("有趣味的",?new?DialogInterface.OnClickListener()?{ ?????public?void?onClick(DialogInterface?dialog,?int?whichButton)?{ ?????????showDialog("你選擇了有趣味的"); ?????} ?}); ?builder.setNeutralButton("有思想的",?new?DialogInterface.OnClickListener()?{ ?????public?void?onClick(DialogInterface?dialog,?int?whichButton)?{ ?????????showDialog("你選擇了有思想的");???????????????????? ?????} ?}); ?builder.setNegativeButton("主題強的",?new?DialogInterface.OnClickListener()?{ ?????public?void?onClick(DialogInterface?dialog,?int?whichButton)?{ ?????????showDialog("你選擇了主題強的");?? ?????} ?}); ?builder.create().show();? 3.列表框 這個數組用于列表選擇 ?
final?String[]?mItems?=?{"item0","item1","itme2","item3","itme4","item5","item6"};? AlertDialog.Builder?builder?=?new?AlertDialog.Builder(MainDialog.this);? ?????????builder.setTitle("列表選擇框"); ?????????builder.setItems(mItems,?new?DialogInterface.OnClickListener()?{ ?????????????public?void?onClick(DialogInterface?dialog,?int?which)?{ ?????????????????//點擊后彈出窗口選擇了第幾項 ?????????????????showDialog("你選擇的id為"?+?which?+?"?,?"?+?mItems[which]); ?????????????} ?????????}); ?????????builder.create().show(); ? 4.單項選擇列表框
?
mSingleChoice 用于記錄單選中的ID
int?mSingleChoiceID?=?-1;? AlertDialog.Builder?builder?=?new?AlertDialog.Builder(MainDialog.this);? ??mSingleChoiceID?=?-1; ?builder.setIcon(R.drawable.icon); ?????builder.setTitle("單項選擇"); ?????builder.setSingleChoiceItems(mItems,?0,?new?DialogInterface.OnClickListener()?{ ?????????public?void?onClick(DialogInterface?dialog,?int?whichButton)?{ ?????????????????mSingleChoiceID?=?whichButton; ?????????????????showDialog("你選擇的id為"?+?whichButton?+?"?,?"?+?mItems[whichButton]); ?????????} ?????}); ?????builder.setPositiveButton("確定",?new?DialogInterface.OnClickListener()?{ ?????????public?void?onClick(DialogInterface?dialog,?int?whichButton)?{ ?????????????if(mSingleChoiceID?>?0)?{ ?????????????showDialog("你選擇的是"?+?mSingleChoiceID); ?????????????} ?????????} ?????}); ?????builder.setNegativeButton("取消",?new?DialogInterface.OnClickListener()?{ ?????????public?void?onClick(DialogInterface?dialog,?int?whichButton)?{ ??????????} ?????}); ????builder.create().show();? 5.進度條框
點擊進度條框按鈕后 開啟一個線程計算讀取的進度 假設讀取結束為 100
Progress在小于100的時候一直在線程中做循環++ 只到讀取結束后,停止線程。
??????????mProgressDialog?=?new?ProgressDialog(MainDialog.this); ??????mProgressDialog.setIcon(R.drawable.icon); ??????mProgressDialog.setTitle("進度條窗口"); ??????mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); ??????mProgressDialog.setMax(MAX_PROGRESS); ??????mProgressDialog.setButton("確定",?new?DialogInterface.OnClickListener()?{ ??????????public?void?onClick(DialogInterface?dialog,?int?whichButton)?{ ??????????????//這里添加點擊后的邏輯 ??????????} ??????}); ??????mProgressDialog.setButton2("取消",?new?DialogInterface.OnClickListener()?{ ??????????public?void?onClick(DialogInterface?dialog,?int?whichButton)?{ ??????????????//這里添加點擊后的邏輯 ??????????} ??????}); ??????mProgressDialog.show(); ??????new?Thread(this).start(); ??ic?void?run()?{ ?int?Progress?=?0; ?while(Progress?<?MAX_PROGRESS)?{ ?try?{ ?????Thread.sleep(100); ?????Progress++;?? ?????mProgressDialog.incrementProgressBy(1); ?}?catch?(InterruptedException?e)?{ ?????//?TODO?Auto-generated?catch?block ?????e.printStackTrace(); ?} ?? ?} ? 6.多項選擇列表框
?
MultiChoiceID 用于記錄多選選中的id號 存在ArrayList中
選中后 add 進ArrayList
取消選中后 remove 出ArrayList。
ArrayList?<Integer>MultiChoiceID?=?new?ArrayList?<Integer>();? AlertDialog.Builder?builder?=?new?AlertDialog.Builder(MainDialog.this);? ??MultiChoiceID.clear(); ?builder.setIcon(R.drawable.icon); ?????builder.setTitle("多項選擇"); ?????builder.setMultiChoiceItems(mItems, ?????????????new?boolean[]{false,?false,?false,?false,?false,?false,?false}, ?????????????new?DialogInterface.OnMultiChoiceClickListener()?{ ?????????????????public?void?onClick(DialogInterface?dialog,?int?whichButton, ?????????????????????????boolean?isChecked)?{ ????????????????????if(isChecked)?{ ????????????????????????MultiChoiceID.add(whichButton); ????????????????????????showDialog("你選擇的id為"?+?whichButton?+?"?,?"?+?mItems[whichButton]); ????????????????????}else?{ ????????????????????????MultiChoiceID.remove(whichButton); ????????????????????} ????????????????????? ?????????????????} ?????????????}); ?????builder.setPositiveButton("確定",?new?DialogInterface.OnClickListener()?{ ?????????public?void?onClick(DialogInterface?dialog,?int?whichButton)?{ ?????????????String?str?=?""; ?????????????int?size?=?MultiChoiceID.size(); ?????????????for?(int?i?=?0?;i?<?size;?i++)?{ ?????????????str+=?mItems[MultiChoiceID.get(i)]?+?",?"; ?????????????} ?????????????showDialog("你選擇的是"?+?str); ?????????} ?????}); ?????builder.setNegativeButton("取消",?new?DialogInterface.OnClickListener()?{ ?????????public?void?onClick(DialogInterface?dialog,?int?whichButton)?{ ??????????} ?????}); ????builder.create().show();? 7.自定義布局 講到自定義布局我就得多說一說了,為什么要多說一說呢??
其實自定義布局在Android的開發中非常重要 因為它能讓開發者做出自己五彩繽紛的Activity 而不用去使用系統枯燥的界面。
自定義dialog有什么好處?
比如我們在開發過長當中 要通過介紹系統發送的一個廣播彈出一個dialog . 但是dialog必需是基于activity才能呈現出來 如果沒有activity 的話 程序就會崩潰。所以我們可以寫一個自定義的 dialog 把它定義成一個activity
這樣我們收到一條打開dialog的廣播后 直接啟動這個 activity 程序正常運行~~?
這就是自定義dialog的好處。
注明:下面這個例子只是寫了自定義dialog 沒有把它單獨的寫在一個activity中 如果須要的話 可以自己改一下。 AlertDialog.Builder?builder?=?new?AlertDialog.Builder(MainDialog.this);? ??LayoutInflater?factory?=?LayoutInflater.from(this); ??final?View?textEntryView?=?factory.inflate(R.layout.test,?null); ??????builder.setIcon(R.drawable.icon); ??????builder.setTitle("自定義輸入框"); ??????builder.setView(textEntryView); ??????builder.setPositiveButton("確定",?new?DialogInterface.OnClickListener()?{ ??????????public?void?onClick(DialogInterface?dialog,?int?whichButton)?{ ?????????? ??????????EditText?userName?=?(EditText)?textEntryView.findViewById(R.id.etUserName); ??????????EditText?password?=?(EditText)?textEntryView.findViewById(R.id.etPassWord); ??????????showDialog("姓名?:"??+?userName.getText().toString()??+?"密碼:"?+?password.getText().toString()?); ??????????} ??????}); ??????builder.setNegativeButton("取消",?new?DialogInterface.OnClickListener()?{ ??????????public?void?onClick(DialogInterface?dialog,?int?whichButton)?{ ???????????} ??????}); ????builder.create().show();? <span?style="color:#000000;"><?xml?version="1.0"?encoding="utf-8"?>?<RelativeLayout?xmlns:android="http://schemas.android.com/apk/res/android"?android:layout_height="wrap_content"? ?android:layout_width="wrap_content"?android:orientation="horizontal"?android:id="@+id/dialog">?<LinearLayout?android:layout_height="wrap_content"? ?android:layout_width="wrap_content"?android:orientation="horizontal"?android:id="@+id/dialogname">??<TextView?android:layout_height="wrap_content"????android:layout_width="wrap_content"???android:id="@+id/tvUserName"? ???android:text="姓名:"?/>?<EditText?android:layout_height="wrap_content"???android:layout_width="wrap_content"? ???android:id="@+id/etUserName"? ???android:minWidth="200dip"/>?</LinearLayout>?? ?<LinearLayout?android:layout_height="wrap_content"? ?android:layout_width="wrap_content"?android:orientation="horizontal"?android:id="@+id/dialognum"??android:layout_below="@+id/dialogname"?>???<TextView?android:layout_height="wrap_content"????android:layout_width="wrap_content"???android:id="@+id/tvPassWord"? ???android:text="密碼:"?/>?<EditText?android:layout_height="wrap_content"???android:layout_width="wrap_content"? ???android:id="@+id/etPassWord"? ???android:minWidth="200dip"/>??</LinearLayout>?? ???</RelativeLayout></span>? 8.讀取進度框
顯示一個正在轉圈的進度條loading
mProgressDialog?=?new?ProgressDialog(this); ??mProgressDialog.setTitle("讀取ing"); ??mProgressDialog.setMessage("正在讀取中請稍候"); ??mProgressDialog.setIndeterminate(true); ??mProgressDialog.setCancelable(true); ??mProgressDialog.show();? 最后如果你還是覺得我寫的不夠詳細 不要緊我把源代碼的下載地址貼出來 歡迎大家一起討論學習 雨松MOMO希望可以和大家一起進步。
下載地址:http://download.csdn.net/source/3438085
本文出自 “雨松MOMO的程序世界” 博客,請務必保留此出處http://xys289187120.blog.51cto.com/3361352/657562
總結
以上是生活随笔為你收集整理的Android软件开发之盘点所有Dialog对话框大合集(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。