安卓對話框哪個好用
⑴ android 怎樣設置單擊一個按鈕,不會重復彈出dialog
Android中的對話框是經常用的組件,是用來提示用戶的消息的。
常用的對話框有
1:警告對話框
AlertDialog:
一個可以有0到3個按鈕,
一個單選框或復選框的列表的對話框.
警告對話框可以創建大多數的交互界面,
是推薦的類型.
2:進度對話框
ProgressDialog:
顯示一個進度環或者一個進度條.
由於它是AlertDialog的擴展,
所以它也支持按鈕.
3:日期選擇對話框
DatePickerDialog:
讓用戶選擇一個日期.
4:時間選擇對話框
TimePickerDialog:
讓用戶選擇一個時間.
為了讓用戶重復單機按鈕不會重復產生對話框只要在產生對話框的時候做個判斷即可,定義個全局的對話框。
AlertDialog.Builder
builder
=
null;//這里先設置為null
點擊按鈕產生對話框
button2.setOnClickListener(new
OnClickListener()
{
public
void
onClick(View
v)
{
if(builder
!=null){
builder
=
new
AlertDialog.Builder(MainDialog.this);
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();//顯示兌換框
}
}
});
⑵ Android中使用CardView實現圓角對話框
前言:隨著用戶體驗的不斷的加深,良好的UI視覺效果也必不可少,以前方方正正的對話框樣式在APP已不復存在,取而代之的是帶有圓角效果的Dialog,之前設置對畫框的圓角效果都是通過drawable/shape屬性來完成,隨著Google API的不斷更新,API 21(Android 5.0)添加了新的控制項CardView,這使得圓角的實現更加方便快捷。
效果圖:
導入CardView依賴(API 21新控制項)
1.cardCornerRadius屬性:設置圓角的弧度大小,這里設置的為10dp
2.CardView還有padding、cardUseCompatPadding(內邊距)、background等屬性
3.CardView繼承自FrameLayout,使用時可以重新嵌套布局
使用的是V7包的AlertDialog實現的,當然也可以使用Dialog實現。
總結:CardView實現對話框的圓角效果更加的方便,不用編寫shape屬性設置背景,當標題欄需要背景色時,也無需考慮設置標題欄的shape背景(不使用CardView時,如果不使用shape設置背景色,會導致左上和右上不會變成圓角)。
⑶ Android 開發 對話框Dialog dismiss和hide方法的區別
dismiss和hide方法都可以隱藏對話框,在需要的時候也可以用show方法調用顯示。但是,這兩者是有區別的。
dismiss方法會釋放對話框所佔的資源,而hide方法不會。activity退出前必須調用dismiss方法關閉對話框。
如果對話框上有progressbar,你會發現,調用dismiss方法後,再調用show方法,出來的對話框,上面的progressbar不再會轉動,而調用hide方法的則沒有問題。
所以,最正確的調用方法是,在activity的onDestory方法里調用dismiss方法,其他地方都用hide方法隱藏對話框。
⑷ android中Dialog和PopupWindow的區別
Android中的對話框有兩種:PopupWindow和AlertDialog。它們都可以實現彈窗功能,但是他們之間有一些差別,下面總結了一點。 (1)Popupwindow在顯示之前一定要設置寬高,Dialog無此限制。 (2)Popupwindow默認不會響應物理鍵盤的back,除非顯示設置了popup.setFocusable(true);而在點擊back的時候,Dialog會消失。 (3)Popupwindow不會給頁面其他的部分添加蒙層,而Dialog會。 (4)Popupwindow沒有標題,Dialog默認有標題,可以通過dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);取消標題 (5)二者顯示的時候都要設置Gravity。如果不設置,Dialog默認是Gravity.CENTER。 (6)二者都有默認的背景,都可以通過setBackgroundDrawable(new ColorDrawable(android.R.color.transparent));去掉。 其中最本質的差別就是:AlertDialog是非阻塞式對話框:AlertDialog彈出時,後台還可以做事情;而PopupWindow是阻塞式對話框:PopupWindow彈出時,程序會等待,在PopupWindow退出前,程序一直等待,只有當我們調用了dismiss方法的後,PopupWindow退出,程序才會向下執行。這兩種區別的表現是:AlertDialog彈出時,背景是黑色的,但是當我們點擊背景,AlertDialog會消失,證明程序不僅響應AlertDialog的操作,還響應其他操作,其他程序沒有被阻塞,這說明了AlertDialog是非阻塞式對話框;PopupWindow彈出時,背景沒有什麼變化,但是當我們點擊背景的時候,程序沒有響應,只允許我們操作PopupWindow,其他操作被阻塞。 我們在寫程序的過程中可以根據自己的需要選擇使用Popupwindow或者是Dialog。
⑸ android里有非模態對話框嗎
非模態對話框就是Dialog吧,android中的dialog實例代碼為:
1.創建對象框
AlertDialog.Builder builder = new Builder(context);
builder.setTitle("請輸入"); //設置對話框標題
builder.setIcon(android.R.drawable.btn_star); //設置對話框標題前的圖標
2.創建EditText輸入框
final EditText edit = new EditText(context);
3.將輸入框賦值給Dialog,並增加確定取消按鍵
builder.setView(edit);
builder.setPositiveButton("確認", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(context, "你輸入的是: " + edit.getText().toString(), Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(context, "你點了取消", Toast.LENGTH_SHORT).show();
}
});
4.設置常用api,並show彈出
builder.setCancelable(true); //設置按鈕是否可以按返回鍵取消,false則不可以取消
AlertDialog dialog = builder.create(); //創建對話框
dialog.setCanceledOnTouchOutside(true); //設置彈出框失去焦點是否隱藏,即點擊屏蔽其它地方是否隱藏
dialog.show();
⑹ android中有沒有類似ShowMessage那種模態對話框
給個例子好了
java">importandroid.app.Activity;
importandroid.app.Dialog;
importandroid.os.Handler;
importandroid.os.Looper;
importandroid.os.Message;
importandroid.text.method.PasswordTransformationMethod;
importandroid.text.method.TransformationMethod;
importandroid.view.View;
importandroid.widget.CheckBox;
importandroid.widget.EditText;
importandroid.widget.TextView;
{
intdialogResult;
HandlermHandler;
publicPasswordDialog(Activitycontext,StringmailName,booleanretry)
{
super(context);
setOwnerActivity(context);
onCreate();
TextViewpromptLbl=(TextView)findViewById(R.id.promptLbl);
promptLbl.setText("請輸入密碼/n"+mailName);
}
publicintgetDialogResult()
{
returndialogResult;
}
publicvoidsetDialogResult(intdialogResult)
{
this.dialogResult=dialogResult;
}
/**.*/
publicvoidonCreate(){
setContentView(R.layout.password_dialog);
findViewById(R.id.cancelBtn).setOnClickListener(newandroid.view.View.OnClickListener(){
@Override
publicvoidonClick(ViewparamView)
{
endDialog(DialogResult.CANCEL);
}
});
findViewById(R.id.okBtn).setOnClickListener(newandroid.view.View.OnClickListener(){
@Override
publicvoidonClick(ViewparamView)
{
endDialog(DialogResult.OK);
}
});
}
publicvoidendDialog(intresult)
{
dismiss();
setDialogResult(result);
Messagem=mHandler.obtainMessage();
mHandler.sendMessage(m);
}
publicintshowDialog()
{
mHandler=newHandler(){
@Override
publicvoidhandleMessage(Messagemesg){
//processincomingmessageshere
//super.handleMessage(msg);
thrownewRuntimeException();
}
};
super.show();
try{
Looper.getMainLooper().loop();
}
catch(RuntimeExceptione2)
{
}
returndialogResult;
}
}
⑺ 【譯】Android材質組件的動手實踐:Dialogs
Android MDC 系列文章:
這篇文章將介紹 Dialogs 組件的功能和API。要了解如何處理Android的Material Components的初始設置(包括Gradle依賴關系和創建應用程序主題),請參閱我的原始文章:
為Android設置Material Components主題
對話框是組件,通常帶有模式窗口,顯示在應用程序內容的前面。它們用於告知用戶可能包含關鍵信息和/或需要做出決定的任務。它們有目的地打斷電流,並一直顯示在屏幕上,直到被解散或採取措施為止,因此應謹慎使用。
從設計的角度來看,可以在不同的場景中使用三種主要類型的對話框:
上面所有這些都具有共同的特徵:遮蓋應用程序內容的背景稀鬆布(可以選擇輕按以關閉對話框)和表面容器。
注意:存在第四種類型: 全屏對話框 。為此, 官方文檔 建議使用 *DialogFragment* 和資源限定符一起確定其顯示方式。這不在本文的討論范圍之內,因此不會涉及。
可以使用來實現所有上述對話框類型 MaterialAlertDialogBuilder 。該構建器類 AlertDialog 使用Material Design規范和主題來配置和實例化。
顯示對話框的基本方法如下:
配置更改(例如設備旋轉)後,上述方法將不會保留對話框。為了實現這一點,我們需要花一段 DialogFragment 時間使用 MaterialAlertDialogBuilder 來提供 Dialog :
DialogFragment 可以使用 導航體系結構組件 顯示,也可以通過 Fragment 或 Activity 通過以下方式手動顯示:
可以通過將參數傳遞給來實現上面(和更多)三種對話框中列出的所有特徵 MaterialAlertDialogBuilder 。下面列出了其中一些。
注意:在以下大多數情況下,將使用硬編碼值。該構建器還提供資源ID的重載。
注意:對話框的中間區域可以被支持文本或一組特定類型的項目佔用。這些不能合並。
存在幾個主題疊加層,用於更改對話框的總體布局。這些主題覆蓋變體繼承自 ThemeOverlay.MaterialComponents.MaterialAlertDialog ,每個都有一個可選的後綴:
實施全局自定義Material AlertDialog 主題疊加層時,請在您的應用程序主題中使用 materialAlertDialogTheme 屬性引用它。
另外,還有一個輔助 MaterialAlertDialogBuilder 構造函數,它接受覆蓋的主題資源ID:
可以使用三個「材料主題」子系統為主題設置「材料警報」對話框: 顏色 , 版式 和 形狀 。我們已經在上面的 「選擇主題疊加層」 部分中顯示了要使用 的主題疊加層 。除此之外, AlertDialog 可以通過擴展樣式並使用屬性 在 主題疊加層中引用自定義樣式。 MaterialAlertDialog.MaterialComponents``alertDialogStyle
有沒有具體的屬性自定義在一個對話框中使用的顏色,但 colorPrimary , colorSecondary , colorSurface 和各自的「關於」在您的應用程序使用的主題會自動調整對話框顏色顏色改變時。
對話框文本元素將採用 fontFamily 您在應用程序主題中定義的屬性。操作按鈕的樣式將根據 textAppearanceButton 您在應用主題中設置的樣式進行設置。
在主題疊加層中,您還可以使用 屬性為正文文本專門設置樣式。
可以使用該 shapeAppearance 屬性自定義對話框背景的形狀。默認為 。
我希望這篇文章對對話框以及如何在您的Android應用中使用對話框提供了一些見識。如果您有任何疑問,想法或建議,那麼我很樂意收到您的來信!
在Twitter上找到我 @ricknout