Android通過WindowManager實現懸浮框
Android的介面繪製和程式設計,都是通過WindowManager來實現的,而我們要在應用之外繪製一個懸浮框,自然也離不開WindowManager
首先在程式設計之前,要確定是否要相應的許可權
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
還可以通過Settings.ACTION_MANAGE_OVERLAY_PERMISSION檢查許可權,並且讓使用者手動開啟許可權
WindowManager中實現了viewpager的介面,而viewpager中有個addview的方法,新增的view就是我們要顯示的懸浮框
而WindowManager的addview有兩個引數,一個是要加入的view,一個是WindowManager.layoutParam物件,這個物件包含了是否全屏,以及是否攔截觸控事件的引數
同時要注意的是layoutParam中的type變數是用來指定視窗型別的,在設定變數時需要注意區分不同的Android版本
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; } else { layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE; }
在Android8.0以上的版本,如果還是使用TYPE_PHONE那麼將會報異常
而在啟動懸浮框時,為了讓懸浮框和activity或者Fragment脫離,讓其在應用處於後臺時依舊能夠正常使用,將採用service的方式來啟動懸浮框
在啟動之前,先用StartActivityForResult查詢許可權,然後再ActivityResult中獲取返回的值來判斷是否擁有許可權,然後通過startservice啟動服務
在service頁面中初始化windowManager
val windowmanager= context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
獲取需要新增的view
view = LayoutInflater.from(this).inflate(R.layout.float_view, null)
然後通過layoutparams新增
layoutParams = new WindowManager.LayoutParams(); layoutParams.flags = WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; ......
需要注意的是,關閉懸浮框時要remove,還不是單純的stopservice,因為那樣會導致懸浮框依舊存在於視窗之中
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2739835/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android懸浮框的實現Android
- Android 懸浮框實現方法Android
- Android桌面懸浮框Android
- Android中的懸浮框Android
- android懸浮框(service形式)Android
- Android 懸浮視窗的實現Android
- 懸浮窗的一種實現 | Android懸浮窗Window應用Android
- Android懸浮框的適配問題Android
- Android 輕鬆實現 RecyclerView 懸浮條AndroidView
- 如何在Android中實現懸浮ActivityAndroid
- [轉]Android輕鬆實現RecyclerView懸浮條AndroidView
- 【轉載】使用WindowManage實現Android懸浮窗Android
- Android RecyclerView實現頭部懸浮吸頂效果AndroidView
- Android應用內懸浮窗的實現方案Android
- Android 懸浮窗Android
- Andorid 任意介面懸浮窗,實現懸浮窗如此簡單
- Android實現仿360手機衛士懸浮窗效果Android
- 滑鼠懸浮div實現旋轉效果
- Android實現流量統計和網速監控懸浮窗Android
- javascript實現滑鼠懸浮圖片實現抖動效果JavaScript
- 滑鼠懸浮實現環形旋轉效果
- 滑鼠懸浮圖片實現翻轉效果
- 滑鼠懸浮圖片實現縮放效果
- 下沉式通知的一種實現 | Android懸浮窗Window應用Android
- 自制懸浮框,愉快地檢視棧頂 Activity
- Android 懸浮窗 System Alert WindowAndroid
- Android懸浮窗的學習Android
- 記vue下懸浮貼合頂部實現Vue
- 利用css變數實現按鈕懸浮效果CSS變數
- 滑鼠懸浮實現連結背景變色效果
- js滑鼠懸浮字串實現字串跳動效果JS字串
- 滑鼠懸浮實現翻牌效果程式碼例項
- FloatWindow 輕鬆實現安卓任意介面懸浮窗安卓
- 實現列表懸浮標籤「頂上去」的效果
- css3實現滑鼠懸浮劃過光弧效果程式碼例項CSSS3
- Android解析WindowManager(一)WindowManager體系Android
- Android:會呼吸的懸浮氣泡Android
- [譯] CSS 變數實現炫酷滑鼠懸浮效果CSS變數