Android WindowManager Widget

      写这篇文章的原因是因为做项目的时候需要一个类似桌面歌词的悬浮框,然后在实现过程中遇到了一下细节问题

1、首先是明确实现一个悬浮框需要一个WindowManager(单例,管理窗口)和 WindowManager.LayoutParams(确定窗口位置、大小等)

params.flags

      Window Widget 为了不影响其他UI的操作,需要对WindowManager.LayoutParams 的params.flags进行设置

1、WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,如果

设置了这两个说明window不影响其他UI的操作,同时也导致window不能监听点击等需要焦点的事件,但是可以接收Touch事件,所以会使用

Touch事件来代替点击事件的处理

2、如果再加上WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE就说明该窗口是不可以操作的!

params.type

    用于设置窗口的优先级

params.gravity

    这个参数用于确定窗口如何停靠,如果没有设置这个参数(貌似Window会默认设置params.gravity = Gravity.CENTER,

这时params.x和params.y就是相对于Gravity.CENTER指定的边),如果真的没设置那么params.x和params.y就是绝对位置

public int x;
    如果忽略gravity属性,那么它表示窗口的绝对X位置。
   当设置了 Gravity.LEFT 或 Gravity.RIGHT 之后,x值就表示到特定边的距离。
 public int y;
     如果忽略gravity属性,那么它表示窗口的绝对Y位置。
   当设置了 Gravity.TOP 或 Gravity.BOTTOM 之后,y值就表示到特定边的距离。

params.width 、params.height

当设置为 WindowManager.LayoutParams.MATCH_PARENT,那么params.x(or params.y)的值设置之后也没有效果!

如果为WindowManager.LayoutParams.WRAP_CONTENT则params.x(or Params.y)的值有效,而且window的大小会根

据params.x(params.y)来设置


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值