Window和WindowManager

2016-10-18  本文已影响43人  苏简笔记

在屏幕上创建一个浮动试图

首先实现一个功能,在屏幕上创建一个浮窗,创建一个Window,这一步只需要使用WindowManager就可以简单实现,具体步骤如下:

  WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams();
  WindowManager mWindowManager= (WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE);
  //设置window 
  typewmParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
  wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|
  WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;    
   //半透明
  wmParams.format = PixelFormat.TRANSLUCENT;             

  //调整悬浮窗显示的停靠位置为左侧置顶
  wmParams.gravity = Gravity.LEFT | Gravity.TOP;
  // 以屏幕左上角为原点,设置x、y初始值,相对于
  gravitywmParams.x = 0;
  wmParams.y = 0;

  //设置悬浮窗口长宽数据
  wmParams.width = WindowManager.LayoutParams.MATCH_PARENT;
  wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;

  //加载自定义布局
  mFloatLayout = (LinearLayout) inflater.inflate(R.layout.window_float_notification, null);
  //添加到屏幕上
  mWindowManager.addView(mFloatLayout, wmParams);

以上代码就能将一个自定义的试图添加到屏幕原点了。

重点对flag和Type两个属性做一下笔记:
Flag参数表示Window属性。用来控制Window的显示特性

Type表示Window的类型。
Window有三种类型,分别为应用Window(1-99,注:括号内为层级范围),子Window(1000-1999)和系统Window(2000-2999)。Window是分层的,层级大的会覆盖层级小的。

WindowManage所提供的功能很简单,添加View,更新View和删除View(这三个方法定义在ViewManager中,WindowManager继承自此类)。如果要删除WIndow只需要删除它里面的View即可。

给浮动窗口设置拖动功能

Paste_Image.png

Window的内部机制

待续~

上一篇下一篇

猜你喜欢

热点阅读