一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - Android中懸浮窗口的實現原理實例分析

Android中懸浮窗口的實現原理實例分析

2021-04-04 16:09一葉飄舟 Android

這篇文章主要介紹了Android中懸浮窗口的實現原理,以實例形式較為詳細的分析了Android懸浮窗口的原理與具體實現技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了Android懸浮窗口的實現原理。分享給大家供大家參考。具體如下:

用了我一個周末的時間,個中憤懣就不說了,就這個問題,我翻遍全球網絡沒有一篇像樣的資料,現在將實現原理簡單敘述如下:

調用WindowManager,并設置WindowManager.LayoutParams的相關屬性,通過WindowManager的addView方法創建View,這樣產生出來的View根據WindowManager.LayoutParams屬性不同,效果也就不同了。比如創建系統頂級窗口,實現懸浮窗口效果!

WindowManager的方法很簡單,基本用到的就三個addView,removeView,updateViewLayout。

而WindowManager.LayoutParams的屬性就多了,非常豐富,具體請查看SDK文檔。這里給出Android中的WindowManager.java源碼,可以具體看一下。
下面是簡單示例代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class myFloatView extends Activity {
/** Called when the activity is first created. */
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button bb=new Button(getApplicationContext());
WindowManager wm=(WindowManager)getApplicationContext().getSystemService("window");
WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams();
/** *以下都是WindowManager.LayoutParams的相關屬性 * 具體用途請參考SDK文檔 */
wmParams.type=2002; //這里是關鍵,你也可以試試2003
wmParams.format=1; /** *這里的flags也很關鍵 *代碼實際是wmParams.flags |= FLAG_NOT_FOCUSABLE; *40的由來是wmParams的默認屬性(32)+ FLAG_NOT_FOCUSABLE(8) */
wmParams.flags=40;
wmParams.width=40;
wmParams.height=40;
wm.addView(bb, wmParams);//創建View
}
}

別忘了在AndroidManifest.xml中添加權限:

 

復制代碼 代碼如下:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

 

PS:這里舉例說明一下type的值的意思:

?
1
2
3
4
/** * Window type: phone. These are non-application windows providing * user interaction with the phone (in particular incoming calls). * These windows are normally placed above all applications, but behind * the status bar. */
public static final int TYPE_PHONE = FIRST_SYSTEM_WINDOW+2;
/** * Window type: system window, such as low power alert. These windows * are always on top of application windows. */
public static final int TYPE_SYSTEM_ALERT = FIRST_SYSTEM_WINDOW+3;

這個FIRST_SYSTEM_WINDOW的值就是2000。2003和2002的區別就在于2003類型的View比2002類型的還要top,能顯示在系統下拉狀態欄之上!

希望本文所述對大家的Android程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青草青草视频2免费观看 | 国产精品调教 | segou视频在线观看 | 日韩精品免费一级视频 | 欧美精品久久久久久久免费观看 | 国产精品亚洲片夜色在线 | 美女黑人做受xxxxxⅹ | 日韩亚洲国产激情在线观看 | 天天爱天天做天天爽天天躁 | 国产福利兔女郎在线观看 | 免费在线观看成年人视频 | 美女国内精品自产拍在线播放 | 91视频无限看 | 桃乃木香奈ipx在线播放 | 狠狠色婷婷丁香六月 | 女同性互吃奶乳免费视频 | 国产99视频精品免视看7 | 免费精品一区二区三区在线观看 | 国产精品亚洲片在线不卡 | 日本69sex护士www | 国产高清ujzzujzz | 无码精品AV久久久奶水 | 男人的天堂va | h片免费网站 | 国产精品久久久久一区二区三区 | 免费高清视频在线观看 | 国内精品在线观看视频 | 玩乳h文奶水和尚 | japanese秘书丝袜 | 2020年精品国产午夜福利在线 | 亚洲国产精品日韩高清秒播 | 2023毛片| 日本三级欧美三级人妇英文 | 嫩草在线观看视频 | 爱豆传媒最新视频国产 | 国产精品天天看特色大片不卡 | 久久精品国产视频澳门 | 欧美人成绝费网站色www吃脚 | 久久精品免视看国产 | 996免费视频国产在线播放 | 香蕉国产人午夜视频在线观看 |