悬浮窗口的兑现原理,给出简单示例代码
悬浮窗口的实现原理,给出简单示例代码
复制代码
复制代码
本文来自:http://www.eoeandroid.com/thread-56613-1-1.html
最近一些软件有了很牛X的悬浮窗口功能,很好奇怎么实现的,刚刚终于弄出来了...原理就是调用WindowManager直接操控View,然后再配合相应的WindowManager.LayoutParams属性,就OK了。这样产生出来的View根据LayoutParams的属性不同,效果也不一样。有关具体的属性,请自行参考SDK文档。
以下代码请仅供演示:
- 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();
- wmParams.type=2002; //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);
- }
- }
PS:本代码在Android2.3下测试无错(从API Level来看,实际上android1.5都可行)!另外别忘了在AndroidManifest.xml文件中加入如下权限:
- <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
http://www.xsmile.net/?p=404
=============================
已经给出可自由移动悬浮窗口的Demo,请移步至这里:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=58679&extra=