2020年11月14日 星期六

Android 頂層視窗竟然可以用 application context!!!

最近在開發一個系統級的 dialog,不管何時叫出來都可以置於頂層

參考了前人的寫法以及網路上的資料

原來將 dialog 的 getWindow 設定為以下



5.0以下
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

超過 5.0
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);

再加個權限

5.0以下
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />


超過 5.0
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
好像非必要
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />


這樣在 new dialog 的時候就可以傳入 application 的 context 了!
不過我在超過 5.0 的版本失敗了!
錯誤訊息是 你的 activity 需要 appcompat theme
這到底是什麼鬼?

老實說我一開始是朝向帶入 application 的 context 是個錯誤的方向去找答案

經過一番折騰

最後

在我繼承的 dialog 
從 AppCompatDialog 改成 Dialog

事情就完美的結束了
我真的覺得這些不太一般的需求搞得我好累

沒有留言:

張貼留言