Android 为应用增加可移动的悬浮窗口

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

布局:

<?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.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" />

效果图:

时间: 2024-12-03 21:31:36

Android 为应用增加可移动的悬浮窗口的相关文章

Android UI仿QQ好友列表分组悬浮效果

本文实例为大家分享了Android UI仿QQ好友列表分组悬浮效果的具体代码,供大家参考,具体内容如下 楼主是在平板上測试的.图片略微有点大,大家看看效果就好 接下来贴源代码: PinnedHeaderExpandableListView.java 要注意的是 在 onGroupClick方法中parent.setSelectedGroup(groupPosition)这句代码的作用是点击分组置顶, 我这边不须要这个效果.QQ也没实用到,所以给凝视了.大家假设须要能够解开凝视 package c

Android中可自由移动悬浮窗口的Demo

 前段时间捣鼓出Android悬浮窗口的实现,今天抽空写了一个可自由移动悬浮窗口的Demo. 简要说明如下: 1.通过覆写悬浮View中onTouchEvent方法实现自由移动悬浮窗口. 2.悬浮窗口坐标的移动实际是windowMananager.LayoutParams中x和y的变换,但是要注意设置相应的gravity. 3.用windowManager创建的View,当不需要时,务必记住使用windowManager的removeView方法来移除,请在Activity相关生命周期中自行添加

android 悬浮窗口的拖动

package net.xsmile.fv; import android.app.Application; import android.view.WindowManager; public class MyApplication extends Application { /** * 创建全局变量 * 全局变量一般都比较倾向于创建一个单独的数据类文件,并使用static静态变量 * * 这里使用了在Application中添加数据的方法实现全局变量 * 注意在AndroidManifest.

细数Android 7.0“牛轧糖”的五大缺陷:不支持悬浮窗口

导语:当前,Android 7.0 Nougat(牛轧糖)已经开始被缓慢部署至全球各地的Android设备中.按照惯例,仍然是Nexus设备首先获得谷歌最新的移动操作系统,其他的智能手机则还需要等待一些时日. Android 7.0"牛轧糖"中包含一些很酷的新功能,例如分屏多任务处理.捆绑通知以及Daydream VR平台等.然而,俗语说"人无完人",这句话放在产品上也是一样的.今天,外媒指出,Android 7.0"牛轧糖"仍然存在五个需要提升

Android中悬浮窗口的实现原理和示例代码

 用了我一个周末的时间,个中愤懑就不说了,就这个问题,我翻遍全球网络没有一篇像样的资料,现在将实现原理简单叙述如下: 调用WindowManager,并设置WindowManager.LayoutParams的相关属性,通过WindowManager的addView方法创建View,这样产生出来的View根据WindowManager.LayoutParams属性不同,效果也就不同了.比如创建系统顶级窗口,实现悬浮窗口效果! WindowManager的方法很简单,基本用到的就三个addView

android-关于如何利用Android实现悬浮窗口半隐藏的问题

问题描述 关于如何利用Android实现悬浮窗口半隐藏的问题 如何利用Android实现悬浮窗口半隐藏在屏幕外,半显示在屏幕内部, 当用户点击悬浮窗口时,悬浮窗口就会完整的显示出来,当没有用户点击时, 就会处于半隐藏状态. 解决方案 android悬浮窗口的实现android悬浮窗口的实现android悬浮窗口的实现 解决方案二: 不明白你的需求. 如果只是要悬浮窗大小可变,你可以先展示一个小的悬浮窗,点击它之后就移除小的那个,创建一个大的悬浮窗显示出来

android 添加随意拖动的桌面悬浮窗口_Android

用过新版本android 360手机助手都人都对 360中只在桌面显示一个小小悬浮窗口羡慕不已吧? 其实实现这种功能,主要有两步: 1.判断当前显示的是为桌面.这个内容我在前面的帖子里面已经有过介绍,如果还没看过的赶快稳步看一下哦. 2.使用windowManager往最顶层添加一个View .这个知识点就是为本文主要讲解的内容哦.在本文的讲解中,我们还会讲到下面的知识点: a.如果获取到状态栏的高度 b.悬浮窗口的拖动 c.悬浮窗口的点击事件 有开始之前,我们先来看一下效果图:  接下来我们来

Android手机悬浮窗口小案例_Android

本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 –主页面--– //布局中就一个Button public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

Android开发中在TableView上添加悬浮按钮的方法_Android

如果直接在TableVIewController上贴Button的话会导致这个会随之滚动,下面解决在TableView上实现位置固定悬浮按钮的两种方法: 1.在view上贴tableView,然后将悬浮按钮贴在view的最顶层 2.使用window 首先看一下最终的效果,在tableViewController上添加一个悬浮按钮,该按钮不能随着视图的滚动而滚动 首先介绍上面的第一种方法: 1)创建tableview和底部按钮的属性 //屏幕宽 #define kScreenW [UIScreen