1. 程式人生 > 其它 >android 自定義dialog_Dialog 使用詳解

android 自定義dialog_Dialog 使用詳解

技術標籤:android 自定義dialogdialogfragment 使用vant dialog中顯示list自定義dialog

a81e9f550c6ef0484521e14a107aca38.gif

和你一起終身學習,這裡是程式設計師Android

經典好文推薦,通過閱讀本文,您將收穫以下知識點:

一、Dialog 簡介
二、Dialog 基本樣式解析
三、簡單對話方塊的實現
四、多選按鈕對話方塊
五、單選按鈕對話方塊
六、列表對話方塊
七、水平進度條對話方塊
八、圓形進度條對話方塊
九、自定義圖文對話方塊
十、自定義輸入對話方塊
十一、自定義樣式對話方塊
十二、自定義Loading樣式對話方塊
十三、繼承 DialogFragment 實現對話方塊
十四、Activity形式的 對話方塊

十五、倒計時 30s Dialog實現

一、Dialog 簡介

在學習Dialog 之前,我們先了解一下Dialog的基礎關係。
Dialog的繼承關係如下:

java.lang.Object
↳ android.app.Dialog

DialogAndroid常用控制元件之一,主要以彈出框的形式與使用者進行互動。對話方塊是提示使用者作出決定或輸入額外資訊的小視窗。對話方塊不會填充螢幕,通常用於需要使用者採取行動才能繼續執行的模式事件。

二、 Dialog 基本樣式解析

eacf5e4ca0a28573453210e3243e4e4c.png

Dialog 基本樣式

1.標題

這是可選項,只應在內容區域被詳細訊息、列表或自定義佈局佔據時使用。如需陳述的是一條簡單訊息或問題(如圖 上圖中的對話方塊),則不需要標題。

2.內容區域

它可以顯示訊息、列表或其他自定義佈局。

3.操作按鈕

對話方塊中的操作按鈕不應超過三個。

三、簡單對話方塊的實現

  • 1.實現效果:

10b4eda389a74b29ec62b0f03dc06435.png

簡單對話方塊

  • 2.實現程式碼如下:

/**
* 簡單對話方塊
*/

四、多選按鈕對話方塊

  • 1.實現效果:

f31dd30787b93cb27c5cfa617c44e8fc.png

多選按鈕對話方塊

  • 2.實現程式碼:

/**
* 多選按鈕對話方塊
* */

五、單選按鈕對話方塊

  • 1.實現效果:

2992aa90d01630db3c751c9157ae5567.png

單選按鈕對話方塊

  • 2.實現程式碼如下:


/**
* 單選按鈕對話方塊實現
**/
public void SingleChoiceDialog(View view) {
final String font[] = { "小號字型", "中號字型", "大號字型", "超大號字型" };
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("單選對話方塊")
.setIcon(R.drawable.ic_launcher)
.setSingleChoiceItems(font, 0,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
Toast.makeText(DiaLogMethods.this,
"選擇的字型為:" + font[which],
Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
}).setPositiveButton("OK", null)
.setNegativeButton("Cancle", null).create().show();

}

六、列表對話方塊

  • 1.實現效果如下:

e201245baee77012c739b01ab9c0f866.png

列表對話方塊

  • 2.實現程式碼如下:

/**
* 列表對話方塊實現
**/

七、水平進度條對話方塊

  • 1.實現效果如下:

7be3e4ed16fd3053cba34d00818aed1e.png

水平進度條對話方塊

  • 2.實現程式碼如下:


/**
* 水平進度條對話方塊實現
**/
@SuppressWarnings("deprecation")
public void HorProgressDialog(View view) {

final ProgressDialog progressDialog = new ProgressDialog(
DiaLogMethods.this);
progressDialog.setTitle("進度對話方塊");
progressDialog.setIcon(R.drawable.ic_launcher);
progressDialog.setMessage("載入中...");
// 水平進度條顯示
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// 圓形進度條顯示
// progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setCancelable(true);
progressDialog.setButton("Cancle",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(DiaLogMethods.this, "取消進度條對話方塊",
Toast.LENGTH_LONG).show();
progressDialog.cancel();
count = 0;
}
});
progressDialog.setMax(100);
progressDialog.show();
count = 0;
new Thread() {
@Override
public void run() {

while (count <= 100) {
progressDialog.setProgress(count++);
try {
Thread.sleep(50);
} catch (InterruptedException e) {
progressDialog.dismiss();
e.printStackTrace();
}

}
progressDialog.dismiss();
}
}.start();

}

八、 圓形進度條對話方塊

  • 1.實現效果如下:

d938c476bedfabd8cb28bf44cbdd1cd6.png

圓形進度條對話方塊

  • 2.實現程式碼如下:

/**
* 圓形進度條顯示
**/
注意 :

水平進度條,圓形進度條的區別 如下:

// 水平進度條顯示

九、 自定義圖文對話方塊

  • 1.實現效果如下:

191538ad7410ab10808d17acce59b80a.png

自定義圖文對話方塊

  • 2.實現程式碼如下:

/**
* 自定義圖文對話方塊實現
**/
注意:

3.自定義圖文對話方塊的佈局如下:

<?xml version="1.0" encoding="utf-8"?>

十、自定義輸入對話方塊

  • 1.實現效果如下:

6129714d8be12b9619733f185b56f051.png

自定義輸入對話方塊

  • 2.實現程式碼如下:

/**
* 自定義EditText對話方塊
**/
  • 3.自定義對話方塊 佈局如下:

<?xml version="1.0" encoding="utf-8"?>
  • 4.自定義EditText內容佈局

<?xml version="1.0" encoding="utf-8"?>

十一、自定義樣式對話方塊

  • 1.實現效果如下:

01114191e7ea7ca61b2c83e1f04fc2ad.png

自定義樣式對話方塊

  • 2.實現程式碼如下:

/**
* 自定義樣式對話方塊
* **/
  • 3.自定義樣式dialog_custom_style佈局如下:

dialog_custom_style 佈局

<?xml version="1.0" encoding="utf-8"?>
  • 4.EditText 的背景是畫的edittext_background 圓角矩形

edittext_background實現

<?xml version="1.0" encoding="utf-8"?>

android.R.style.Theme_Material_Light_Dialog_Alert是用來定義Dialog樣式。

= 

十二、 自定義Loading樣式對話方塊

  • 1.實現效果如下:

fb82cb3a559b7731dc34ab35ba7af059.png

自定義Loading樣式對話方塊

  • 2.實現程式碼如下:

/**
* 自定義Loading樣式對話方塊
***/
  • 3.自定義Dialog Sstyle 如下:



<style name="loading_dialog" parent="android:style/Theme.Dialog">
<item name="android:windowFrame">@nullitem>
<item name="android:windowNoTitle">trueitem>
<item name="android:windowBackground">@drawable/loading_bgitem>
<item name="android:windowIsFloating">trueitem>
<item name="android:windowContentOverlay">@nullitem>
style>

  • 4.自定義Dialog 樣式動畫如下:

<?xml version="1.0" encoding="utf-8"?>
  • 5.自定義樣式的佈局如下:

<?xml version="1.0" encoding="utf-8"?>

十三、 繼承 DialogFragment 實現對話方塊

  • 1.實現效果如下:

651ec66e7dfc2d7f6f4e8622d981b059.png

繼承 DialogFragment 實現對話方塊

  • 2.自定義繼承DialogFragment 類

實現程式碼如下:

自定義繼承DialogFragment 類

public 
  • 3.Activity 呼叫顯示Dialog方法

/**
* 繼承 DialogFragment 實現對話方塊
* **/

十四、 Activity形式的 對話方塊

只需建立一個Activity,並在清單檔案元素中將其主題設定為Theme.Holo.Dialog樣式即可

<activity android:theme="@android:style/Theme.Holo.Dialog" >

十五、倒計時 30s Dialog實現

  • 1.實現效果如下:

058ece62d48187f2611a6b05230e4a90.png

倒計時關機實現

  • 2.實現程式碼如下:

    private TextView mShutDownTextView;
private Handler mOffHandler;
private Timer mShutdownTime;
private Dialog mDialog;

public void CountDownDialog(View view) {

CreateShutDownDialog();

}

private Handler mNumHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (msg.what > 0) {

// //動態顯示倒計時
mShutDownTextView
.setText("Warning! Battery temperature°С, phone will shutdown in "
+ msg.what + "s");

} else {
if (mDialog != null) {
mDialog.dismiss();
}
mShutdownTime.cancel();
Toast.makeText(getApplicationContext(), "倒計時結束", 0).show();

}
}

};

private void CreateShutDownDialog() {

mShutDownTextView = new TextView(this);
mShutDownTextView.setLineSpacing(1.2f, 1.2f);
mShutDownTextView.setText("");
mShutDownTextView.setPadding(20, 20, 20, 20);
mDialog = new AlertDialog.Builder(this).setTitle("Safety Warning")
.setCancelable(false).setView(mShutDownTextView)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
mShutdownTime.cancel();

}
}).create();
mDialog.show();
mDialog.setCanceledOnTouchOutside(false);
mShutdownTime = new Timer(true);
TimerTask timeTask = new TimerTask() {
int countTime = 30;

public void run() {
if (countTime > 0) {
countTime--;
}
Message msg = new Message();
msg.what = countTime;
mNumHandler.sendMessage(msg);
}
};
mShutdownTime.schedule(timeTask, 1000, 1000);
}

0252c95661fa4e838602ec70f662c597.png

點個在看,方便您使用時快速查詢!