作为android一个重要的服务,该接口可实现添加view到屏幕,也可删除屏幕中的view,并通过layoutparams来设置view的不同效果。
例如,利用其制作悬浮框:
WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); WindowManager.LayoutParams wmParams =new WindowManager.LayoutParams();
wmParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;//对话框
wmParams.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN;//输入法显示时平移窗口
wmParams.format = 1;//不透明
wmParams.gravity = Gravity.LEFT | Gravity.TOP;
if (!IsFocusable)
wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;//不允许获取焦点
else
{
wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;//当窗口可以获得焦点时,仍然将窗口范围之外的点设备事件(鼠标、触摸屏)发送给后面的窗口处理
}
获取自定义布局的宽高:
xxView.measure(w, h); width = xxView.getMeasuredWidth(); height = xxView.getMeasuredHeight();这里可以在此基础上进行对话框大小的调整。
定义触摸事件:
view.setOnTouchListener(new OnTouchListener() { float X = 0; float Y = 0; @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { if (view.getParent() != null) { wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;// 不允许获取焦点 windowManager.updateViewLayout(view, wmParams); } return false; } else { wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH; windowManager.updateViewLayout(view, wmParams); } switch (event.getAction()) { // 按下 case MotionEvent.ACTION_DOWN: Y = event.getY(); X = event.getX(); break; // 移动 case MotionEvent.ACTION_MOVE: wmParams.x = (int) (event.getRawX() - X); wmParams.y = (int) (event.getRawY() - Y); windowManager.updateViewLayout(view, wmParams); break; default: break; } return false; } }); }