android悬浮窗工具,Android悬浮窗实例

iPhone有个很好用的白色圆点,今天就来研究下Android中的悬浮框,这里主要是实现一个快捷键的功能,当然也可以在悬浮框中做想做的事!

悬浮窗的实现主要是通过WindowManager实现,当然WindowManager只是一个接口,想了解源码的同志们可以去看WindowManagerImpl,悬浮框主要是通过WindowManager中的addView,updateView,removeView实现。

WindowManager.LayoutParams这个类用于提供悬浮窗所需的参数。

WindowManager.LayoutParams参数说明:

• type 用于确定悬浮窗的类型(window类型,window有三种类型,应用window,子window,系统window,其中悬浮窗中使用的是系统window),一般使用TYPE_PHONE,表示在所有应用程序之上,状态栏之下,当然这里还提供了很多类型,TYPE_STATUS_BAR(状态栏)TYPE_SEARCH_BAR(搜索框)TYPE_SYSTEM_ALERT(系统提示框,例如电量很低时提示)等等,有很多,根据需求去选择

• flags 用于确定悬浮窗的行为,FLAG_NOT_FOCUSABLE(window不需要获得焦点,也不需要接收各种输入事件)FLAG_NOT_TOUCHABLE(不可点击)FLAG_NOT_TOUCH_MODAL(系统会通过当前window区域以外的单击事件传递给底层的window,当前window区域以内的单击事件则自己处理)FLAG_SHOW_WHEN_LOCKED(显示在锁屏的界面上)等等

• gravity 用于确定悬浮窗的对齐方式

• x 用于确定悬浮窗的横坐标

• y 用于确定悬浮窗的纵坐标

• width 值用于指定悬浮窗的宽度

• height 值用于指定悬浮窗的高度

了解这些参数基本就能创建一个悬浮框了

Java代码privatevoidcreateFloatView() {

mWindowManager = (WindowManager) getApplication().getSystemService(getApplication().WINDOW_SERVICE);

wmParams = newWindowManager.LayoutParams();

wmParams.type = WindowManager.LayoutParams.TYPE_PHONE;

wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;

wmParams.gravity = Gravity.LEFT | Gravity.TOP;

wmParams.x = 100;

wmParams.y = 100;

wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;

wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;

LayoutInflater inflater = LayoutInflater.from(getApplication());

mFloatLayout = (LinearLayout) inflater.inflate(R.layout.layout_float_window, null);

mWindowManager.addView(mFloatLayout, wmParams);

mFloatView = (ImageView) mFloatLayout.findViewById(R.id.img_float_window);

mFloatView.setOnTouchListener(newView.OnTouchListener() {

@Override

publicbooleanonTouch(View v, MotionEvent event) {

wmParams.x = (int) event.getRawX() - mFloatView.getMeasuredWidth() /2;

wmParams.y = (int) event.getRawY() - mFloatView.getMeasuredHeight() /2-25;

mWindowManager.updateViewLayout(mFloatLayout, wmParams);

returnfalse;

}

});

mFloatView.setOnClickListener(newView.OnClickListener() {

@Override

publicvoidonClick(View v) {

Intent intent = newIntent(FloatWindowService.this, SearchActivity.class);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

getApplication().startActivity(intent);

}

});

}

Java代码if(mFloatLayout !=null) {

mWindowManager.removeView(mFloatLayout);

}

以上就是悬浮框的过程,当然使用系统window必须要申请权限:

XML/HTML代码

通过上面这个过程知道了如何通过WindowManager创建悬浮框

下面给你一个Demo,其中有两个悬浮窗,第一个悬浮窗就是普通的悬浮窗,第二个悬浮窗加了一些判断,可以直接在app中使用,这个悬浮窗在桌面和你自己的app中显示

2015年12月21日

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值