一个简单的浮窗工具

作者: 大利猫 | 来源:发表于2016-11-03 14:26 被阅读527次

FloatUtil

一个简单的浮窗工具。封装了浮窗的使用方法,并做了系统、版本的兼容处理,帮你绕过权限的限制。

float_drag.gif

开始

项目使用 jitpack 做开源库的托管,你需要在 .gradle 中添加 jitpack
的仓库。

allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

在添加 FloatUtil 的依赖引用:

dependencies {
     compile 'com.github.liuguangli:FloatUtil:master-SNAPSHOT'
}

创建一个简单的浮窗

  SimpleView floatView = new SimpleView(this);
  FloatUtil.showFloatView(floatView, null);

SimpleView 是你自定义的 View,就这么简单,浮窗显示出来了。

simple_float.gif

关闭浮窗

  FloatUtil.hideFloatView(context, SimpleView.class, false);

z同一个 View 类,同时只能显示一个实例, 关闭的时候指定一个 class 对象便能知道关闭哪个浮窗实例。 最后一个参数
决定要不要将当前实例缓存,以便下次快速显示并维持状态,false 代表不缓存,true 表示要缓存。

向浮窗传递参数

FloatUtil 提供了一个接口:ParamReceiver。你自定义的 View 实现这个接口便能接收参数。

 public class SimpleViewWitchParam extends FrameLayout implements ParamReceiver {
    public static final java.lang.String PARAM = "PARAM";
    public static final String CONTENT = "content";
    @Override
    public void onParamReceive(Bundle bundle) {
        // 在这个回调方法中接收参数并解析
        if (bundle != null) {
            String param = bundle.getString(PARAM);
            
        }
    }
}

然后在添加这个 SimpleViewWitchParam 到浮窗。

    SimpleViewWitchParam floatView = new SimpleViewWitchParam(this);
    Bundle bundle = new Bundle();
    bundle.putString(SimpleViewWitchParam.PARAM, "我是传过来的参数");
    FloatUtil.showFloatView(floatView, bundle);
float_param.gif

指定层级和对齐方式

    SimpleViewWitchParam floatView = new SimpleViewWitchParam(this);
    // 居中对齐,浮窗层级为 WindowManager.LayoutParams.TYPE_TOAST
    FloatUtil.showFloatView(floatView, Gravity.CENTER,WindowManager.LayoutParams.TYPE_TOAST , null);
float_center.gif

浮窗类型 type 决定了浮窗的层级,关于浮窗层级的详细理解可以参考我的博客:《浮窗开发之窗口层级》,
Android 系统对窗体的某些层级有权限限制,例如 WindowManager.LayoutParams.TYPE_PHONE 类型的窗体需要授权。

智能浮窗(突破授权)

FloatUtil 提供智能方式添加浮窗,针对特定的系统版本、机型为你选择合适的浮窗 type ,越过授权(详细参考我的博客:越过用户授权使用浮窗),你不需要再去关注复杂的处理过程。

    SimpleViewWitchParam floatView = new SimpleViewWitchParam(this);
    Bundle bundle = new Bundle();
    bundle.putString(SimpleViewWitchParam.PARAM, "智能浮窗");
    // 指定浮窗显示的位置
    Point point = new Point();
    point.x = 0;
    point.y = 0;
    FloatUtil.showSmartFloat(floatView, Gravity.CENTER, point, bundle);

开源地址

https://github.com/liuguangli/FloatUtil

相关文章

网友评论

  • 宇宙只有巴掌大:事件会调用两次

    floatBallView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    //FloatUtil.hideFloatView(MainActivity.this, FloatBallView.class, false);
    Log.e(TAG, "close");
    }
    });
  • 宇宙只有巴掌大:而且 点击事件的和 滑动的冲突 依赖 view 层面 感觉不太合适啊。难不成想要 add一个拖动的view进去 还必须 简单自定义view才行....
    大利猫:@宇宙只有巴掌大 我试了几台手机都没有呢,你什么手机
  • 唐代少卿:有源码吗?
    大利猫:@南城茶凉 文章最后有链接呀

本文标题:一个简单的浮窗工具

本文链接:https://www.haomeiwen.com/subject/jjobuttx.html