天天看點

用Activity實作對話框效果

大家在做彈出對話框效果的時候最容易想到的是用Dialog顯示

彈出對話框的實作效果有兩種

  • Dialog
  • Activity

網上各種各樣實作Dialog的方式有很多,他們還加了很多的特技,比如動畫啥的

(但是今天實作的是用Activity顯示對話框的樣式)

用Dialog顯示一個對話框(示範效果) 點選空白處Dialog消失,必須要再次點選彈出按鈕才能再次彈出對話框

用Activity實作對話框效果

Activity實作對話框的方法,可以在沒有按鈕的時候也彈出對話框,且如果點選了空白,對話框依舊可以顯示(示範效果)

用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);
                    }
            }, );
            }
           
用Activity實作對話框效果

這樣兩秒跳轉的功能就完成了

使用者點選空白處(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);
                    }
                }
            }, );