悬浮窗口的兑现原理,给出简单示例代码

悬浮窗口的实现原理,给出简单示例代码

本文来自:http://www.eoeandroid.com/thread-56613-1-1.html

 

最近一些软件有了很牛X的悬浮窗口功能,很好奇怎么实现的,刚刚终于弄出来了...原理就是调用WindowManager直接操控View,然后再配合相应的WindowManager.LayoutParams属性,就OK了。这样产生出来的View根据LayoutParams的属性不同,效果也不一样。有关具体的属性,请自行参考SDK文档。

以下代码请仅供演示:

  1. public class myFloatView extends Activity {
  2.     /** Called when the activity is first created. */
  3.     @Override
  4.     public void onCreate(Bundle savedInstanceState) {
  5.         super.onCreate(savedInstanceState);
  6.         setContentView(R.layout.main);
  7.         Button bb=new Button(getApplicationContext());
  8.         WindowManager wm=(WindowManager)getApplicationContext().getSystemService("window");
  9.         WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams();
  10.         wmParams.type=2002;  //type是关键,这里的2002表示系统级窗口,你也可以试试2003。
  11.         wmParams.format=1;
  12.         /**
  13.          *这里的flags也很关键
  14.          *代码实际是wmParams.flags |= FLAG_NOT_FOCUSABLE;
  15.          *40的由来是wmParams的默认属性(32)+ FLAG_NOT_FOCUSABLE(8)
  16.          */
  17.         wmParams.flags=40;
  18.         wmParams.width=40;
  19.         wmParams.height=40;
  20.         wm.addView(bb, wmParams);     
  21.     }
  22. }
复制代码

PS:本代码在Android2.3下测试无错(从API Level来看,实际上android1.5都可行)!另外别忘了在AndroidManifest.xml文件中加入如下权限:

  1. <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=