大家在做彈出對話框效果的時候最容易想到的是用Dialog顯示
彈出對話框的實作效果有兩種
- Dialog
- Activity
網上各種各樣實作Dialog的方式有很多,他們還加了很多的特技,比如動畫啥的
(但是今天實作的是用Activity顯示對話框的樣式)
用Dialog顯示一個對話框(示範效果) 點選空白處Dialog消失,必須要再次點選彈出按鈕才能再次彈出對話框
Activity實作對話框的方法,可以在沒有按鈕的時候也彈出對話框,且如果點選了空白,對話框依舊可以顯示(示範效果)
這個的動态圖的意思是,我的界面沒有任何彈出對話框的按鈕,在程式開啟兩秒之後彈出一個對話框,當我點選螢幕空白的地方對話框關閉,并在兩秒之後對話框再次顯示
這個效果肯定是可以用Dialog實作的,但是我認為使用Activtiy會更加簡單
難點:在使用者點選空白後(DialogActivity被覆寫,初始Activity再次顯示),過兩秒鐘顯示對話框(在沒有Button的情況下)
突破點:要監聽Activity的周期,點選空白後當初始Activity重新被顯示的兩秒鐘之後彈出對話框
實作步驟:
将一個Activity做成對話框形式 就叫DialogActivity
初始Ativity兩秒之後顯示DialogActivity
使用者點選空白處(DialogActivity為關閉狀态) 過兩秒之後再次彈出對話框
将一個Activity呈Dialog顯示
1.首先要将這個xml設計出來,也就是對話框顯示的樣子
此處省略代碼……
2.設定Activty樣式為Dialog
清單檔案
↓
選擇要顯示成Dialog的activity标簽
↓
設定 theme 屬性
↓
一般設定成Dialog樣式都會帶有Dialog字樣
android:theme=”@android:style/Theme.DeviceDefault.Dialog.NoActionBar.MinWidth”
這樣就大功告成了
顯示初始Activity的兩秒之後,顯示DialogActivity
1.兩秒的計時我是用的 Timer 類,在兩秒鐘之後跳轉到DialogActivty界面
這個方法的使用,因為要不斷顯示彈出對話框,是以用while循環
while(true){
mTimer = new Timer();
mTimer.schedule(new TimerTask() {
@Override
public void run() {
//跳轉到界面
Intent intent = new Intent(WelcomeActivity.this, DialogActivty.class);
startActivity(intent);
}
}, );
}
這樣兩秒跳轉的功能就完成了
使用者點選空白處(DialogActivity自動關閉) 過兩秒之後再次彈出對話框
那這個方法在哪裡調用的呢?是在onCreate()中調用嗎??
試想一下,當使用者點選空白處DialogActiviy消失,繼續顯示到初始Activity,這個時候還會再調用初始Activity的onCreate()方法嗎
答案是不會,再次顯示的時候會調用onResume()方法
而一開始顯示初始界面的時候也會調用onResume()方法
那這樣就把顯示(跳轉)DialogActivity的方法放到onResume()中
@Override
protected void onResume() {
super.onResume();
showDia();
}
這樣的話就實作了用Activity顯示Dialog樣式,并根據Activity的生命周期顯示DialogActivity
小Bug調試
這樣寫是完成了效果但是會出現一個小小的Bug,當退出初始界面的時候,還是會兩秒就彈出一個對話框
解決辦法
在初始Activity關閉的時候,判斷是否還需要跳轉(設定變量isIntent初始為true),并關閉跳轉的timer任務
@Override
protected void onStop() {
super.onStop();
//不再跳轉
isIntent=false;
mTimer.cancel();
}
這樣的話跳轉任務也要判斷一下
//判斷是否還需要跳轉
if (isIntent){
//跳轉到界面
Intent intent = new Intent(WelcomeActivity.this, IpsetActivity.class);
startActivity(intent);
}
}
}, );