安卓可移动的悬浮窗口的使用

需求描述:

在使用手机客户端浏览内嵌网页的时候,界面出现一个悬浮的刷新按钮,点击网页重新加载。


定义窗口布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <ImageView 
        android:id="@+id/float_fresh"
        android:padding="5dp"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:src="@drawable/icon_fresh"
        android:background="@drawable/bg_floatbutton"/>
</LinearLayout>





设置窗口类型在所有窗口之上:

    	//获取LayoutParams对象
        wmParams = new WindowManager.LayoutParams();
        
        //获取的是LocalWindowManager对象
        wmParams.type = LayoutParams.TYPE_PHONE;
        wmParams.format = PixelFormat.RGBA_8888;//背景透明
        wmParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE;//如果没有这句话的话,在生成悬浮窗口后,悬浮窗口后的界面上东西都不能点。这句话的目的是让悬浮窗口失去焦点。

这里说一下这个LayoutParams.TYPE_PHONE。
我们看一下官方文档说明:
These are non-application windows providing user interaction with the phone (in particular incoming calls). These windows are normally placed above all applications, but behind the status bar. In multiuser systems shows on all users' windows.
就是说设置了这个属性之后,这个窗口会在所以的界面之上,但是在状态栏的下面。在多用户系统中,所有用户的窗口上都会显示。


定义拖动和点击事件:

        mFloatView.setOnTouchListener(new OnTouchListener() {
			
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				// TODO Auto-generated method stub  
					wmParams.x = sWidth - (int) event.getRawX() - mFloatLayout.getMeasuredWidth() / 2;  
	                wmParams.y = sHeight - (int) event.getRawY() - mFloatLayout.getMeasuredHeight() / 2;
	                if(wmParams.y > sHeight - titleHeight){
	                	return true;
	                }
	                 //刷新  
	                mWindowManager.updateViewLayout(mFloatLayout, wmParams); 
	                return false;
			}
		});
        
        mFloatView.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				web.reload();
			}
		});

别忘了权限声明:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />


效果图:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值