Android悬浮窗使用小结

本文详细介绍了如何在Android中利用WindowManager创建和管理悬浮窗,包括使用ButterKnife简化视图绑定,通过Service实现悬浮窗的持久展示,动态申请权限以及处理'not attached to window manager'的错误。同时,文章还涵盖了悬浮窗的移动操作。
摘要由CSDN通过智能技术生成

   Android的窗口体系中,WindowManager占有非常重要的地位,它封装了添加、移除、更新窗口的方法,它是Activity、View的更加底层的管理类,使用WindowManager的其中一个例子就是制作悬浮窗或悬浮球之类的悬浮组件,这种悬浮组件不依赖某个Activity,它可以在任何界面显示(只要你愿意)。

   这篇文章将对如何使用悬浮球做简单总结,即使在android6.0下(android6.0使用动态权限管理),它也可以正常工作。

1.使用ButterKnife

ButterKnife可以方便的获取到xml中定义的view的实例,比findViewById方便多了,使用ButterKnife非常简单,可以总结为3步吧:

  1. 添加对应依赖

  1. compile 'com.jakewharton:butterknife:7.0.0'

  1. 声明id与对应的View

  1. <pre style="font-family: 宋体; font-size: 9pt; background-color: rgb(255, 255, 255);"><pre name="code" class="java">    @Bind(R.id.start) Button start;
        @Bind(R.id.stop) Button stop;
        @Bind(R.id.bind) Button bind;
        @Bind(R.id.unbind) Button unbind;
     
     

  1. 获取View

  1. ButterKnife.bind(this);
    在onCreate中调用它就可以。通过这句调用,start,stop,bind,unbind几个Button都被实例化了。

2.使用Service

我希望悬浮窗是在Service中被显示出来的,并且它的管理也在Service中实现。Service有两种启动方式,对应了不同的用途,使用bindService方式启动的Service可以过得一个Ibinder的实例,使用这个实例可以操作Service的所有Public方法,一般用于Activity和Service交互比较频繁的场合下,所以我们这里使用startService启动Service比较合理。
分析清楚以后,开始实现代码:

2.1Service

public class FlowWindowService extends Service {
    private final String TAG = "FlowWindowService";
    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG,"onCreate");
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        Log.d(TAG,"onBind");
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(TAG,"onStartCommand");
        showFlowWindow();
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG,"onDestroy");
    }

    public void showFlowWindow(){
        Log.v(TAG,"showFlowWindow");
        WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
        Button button = new Button(getApplicationContext());
        button.setText("flow");
        button.setBackgro
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值