先上图:
布局文件:
主类:
public class FloatWindowActivity extends Activity implements OnClickListener {
private Button bt_show;
private Button bt_hidden;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bt_show = (Button) findViewById(R.id.bt_show);
bt_hidden = (Button) findViewById(R.id.bt_hidden);
bt_show.setOnClickListener(this);
bt_hidden.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent service = new Intent(FloatWindowActivity.this, MyService.class);
switch (v.getId()) {
case R.id.bt_show:
startService(service);
break;
case R.id.bt_hidden:
stopService(service);
break;
}
}
}
MyService类:
public class MyService extends Service {
private WindowManager wManager;
private LayoutInflater inflater;
private View floatWindow;
@Override
public void onCreate() {
super.onCreate();
wManager = (WindowManager) this.getSystemService(WINDOW_SERVICE);
inflater = LayoutInflater.from(getApplicationContext());
WindowManager.LayoutParams params = new LayoutParams();
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
// 设置悬浮窗口:不可触摸,不可获取焦点,保持在最上层
params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
// 设置悬浮窗口为半透明(translucent:半透明)
params.format = PixelFormat.TRANSLUCENT;
// 模仿Toast
params.type = WindowManager.LayoutParams.TYPE_TOAST;
params.setTitle("Toast");
params.gravity = Gravity.LEFT | Gravity.BOTTOM;
// 如果params.gravity设置为Gravity.LEFT | Gravity.BOTTOM
// 那么params.x=200就表示悬浮窗口的左边与屏幕的左边距离为200
// params.y=200就表示悬浮窗口的下边与屏幕的下边距离为200
params.x = 200;
params.y = 200;
floatWindow = View.inflate(this, R.layout.floatwindow, null);
// 这一步就会使悬浮窗口显示出来
wManager.addView(floatWindow, params);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
super.onDestroy();
// 使悬浮窗口消失
wManager.removeView(floatWindow);
floatWindow = null;
}
}
当我们点击“显示悬浮窗口”:
当我们按HOME键,悬浮窗口依然处于最上层:
当我们返回该程序,点击“隐藏悬浮窗口”,悬浮窗口就消失了。
注意在清单文件中对MyService进行配置: <service android:name=".MyService" >