android 應用內通知,仿通知欄通知效果,通知Toast,懸浮窗
阿新 • • 發佈:2019-01-09
開發應用,有時候需要在應用內通知提示,如果涉及內部通知提示過多,就需要考慮展示問題,而且還有需要考慮,內部通知提示,不能影響使用者的操作行為,以及切換介面的時候(Activity切換)通知提示還得存在一定時間後消失或者不消失,結合這些問題,自己嘗試去搞搞,最後有點效果出來,先將效果圖貼出:
涉及知識點:
- WindowManager 的使用
- BroadcastReceiver註冊、銷燬
- 監聽home鍵事件
- ListView和ArrayAdapter
- Inflate新增的佈局
- handler.postDelayed
分析
- 通過Application獲取開啟程式的視窗getSystemService(Context.WINDOW_SERVICE)
- 通過inflate例項自定義佈局
- 對Window的flag進行設定,設定FLAG_KEEP_SCREEN_ON(當該window對使用者可見時,讓裝置螢幕處於高亮(bright)狀態)和FLAG_NOT_FOCUSABLE(讓window不能獲得焦點,這樣使用者快就不能向該window傳送按鍵事件及按鈕事件)
- 對Window的type進行設定型別,對於API 大於18的設定TYPE_TOAST(toast型別的window),小於則設定TYPE_PHONE(電話視窗。它用於電話互動(特別是呼入)。它置於所有應用程式之上,狀態列之下),需要獲取許可權
- 其他就是對列表進行開發,使用ListView和adapter
貼上程式碼:
``` windowManager = (WindowManager)context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE); layoutContent = (LinearLayout) View.inflate(context, R.layout.jnotice, null); listView = (ListView) layoutContent.findViewById(R.id.listView); int w = WindowManager.LayoutParams.MATCH_PARENT; int h = WindowManager.LayoutParams.WRAP_CONTENT; int flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON; int type; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { type = WindowManager.LayoutParams.TYPE_TOAST; } else { type = WindowManager.LayoutParams.TYPE_PHONE; } layoutParams = new WindowManager.LayoutParams(w, h, type, flags, PixelFormat.TRANSLUCENT); layoutParams.gravity = Gravity.TOP; ```