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懸浮窗Window應用Android
- 【轉載】使用WindowManage實現Android懸浮窗Android
- [轉]Android輕鬆實現RecyclerView懸浮條AndroidView
- Android RecyclerView實現頭部懸浮吸頂效果AndroidView
- Android 懸浮窗Android
- Android懸浮窗的學習Android
- Android 懸浮窗 System Alert WindowAndroid
- 下沉式通知的一種實現 | Android懸浮窗Window應用Android
- 滑鼠懸浮div實現旋轉效果
- Android:會呼吸的懸浮氣泡Android
- 滑鼠懸浮圖片實現翻轉效果
- 滑鼠懸浮圖片實現縮放效果
- 滑鼠懸浮實現環形旋轉效果
- Android仿微信文章懸浮窗效果Android
- Android 攝像頭預覽懸浮窗Android
- 利用css變數實現按鈕懸浮效果CSS變數
- 記vue下懸浮貼合頂部實現Vue
- Android 輔助許可權與懸浮窗Android
- Android懸浮窗怎麼簡單實現?這樣用 kotlin編寫輕鬆搞定!AndroidKotlin
- [譯] CSS 變數實現炫酷滑鼠懸浮效果CSS變數
- 【Flutter】如何優美地實現一個懸浮NavigationBarFlutterNavigation
- 小程式上是實現拖動懸浮圖示
- 利用CSS變數實現炫酷的懸浮效果CSS變數
- JS錯誤記錄 – 右側懸浮框 – 緩衝運動JS
- 利用CSS變數實現令人震驚的懸浮效果CSS變數
- 專案需要實現按鈕懸浮的功能, 實現後的記錄
- Android之Window與WindowManagerAndroid
- dataTable.js使用總結(包含序號生成,懸浮框使用等)JS
- vivo系統無許可權開啟懸浮框的問題
- 懸浮窗開發設計實踐
- JavaScript實現HTML導航欄下拉選單[懸浮顯示]JavaScriptHTML
- 滑鼠懸浮連結底部出現橫線
- ALaunch 0.8 := 懸浮提示
- 簡單介紹Vue實現滑鼠懸浮切換圖片srcVue
- 使用Three.js實現神奇的3D文字懸浮效果JS3D