您的位置:首页 > 移动开发 > Android开发

Android实现悬浮窗口

2016-11-28 14:39 134 查看
Android悬浮窗口步骤

1新建FxService

package service;

import android.app.Service;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.LinearLayout;

import wellray.fxdemo.R;

public class FxService extends Service{

WindowManager mWindowManager;
WindowManager.LayoutParams wmParams;
LinearLayout mFloatLayout;
Button mFloatView;
boolean flag=true;

private static final String TAG = "FloatWindowTest";
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public void onCreate() {
super.onCreate();
Log.i(TAG, "onCreate"  );
createFloatView();

}

@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
if(flag){
flag=false;
mWindowManager.addView(mFloatLayout, wmParams);
}
}

private void createFloatView() {
//获取LayoutParams对象
wmParams = new WindowManager.LayoutParams();

//获取的是LocalWindowManager对象
mWindowManager = (WindowManager)getApplication().getSystemService(getApplication().WINDOW_SERVICE); ;

//获取的是CompatModeWrapper对象
//mWindowManager = (WindowManager) getApplication().getSystemService(Context.WINDOW_SERVICE);
Log.i(TAG, "mWindowManager3--->" + mWindowManager);
wmParams.type = WindowManager.LayoutParams.TYPE_PHONE;
wmParams.format = PixelFormat.RGBA_8888;;
wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
wmParams.gravity = Gravity.LEFT | Gravity.TOP;
wmParams.x = 0;
wmParams.y = 0;
wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;

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

mFloatLayout = (LinearLayout) inflater.inflate(R.layout.fx_layout, null);
mFloatView = (Button)mFloatLayout.findViewById(R.id.button_f);

//绑定触摸移动监听
mFloatView.setOnTouchListener(new View.OnTouchListener()
{

@Override
public boolean onTouch(View v, MotionEvent event)
{

wmParams.x = (int)event.getRawX() - mFloatLayout.getWidth()/2;
//25为状态栏高度
wmParams.y = (int)event.getRawY() - mFloatLayout.getHeight()/2 - 40;
mWindowManager.updateViewLayout(mFloatLayout, wmParams);
return false;
}
});

//绑定点击监听
mFloatView.setOnClickListener(new View.OnClickListener()
{

@Override
public void onClick(View v)
{
/* Intent intent = new Intent( getActivity(), ResultActivity.class);
startActivity(intent);*/
/* if(mFloatLayout!=null){
mWindowManager.removeView(mFloatLayout);
flag=true;
}*/
stopSelf();
}
});
}
@Override
public void onDestroy()
{
super.onDestroy();
if(mFloatLayout != null)
{
//移除悬浮窗口
mWindowManager.removeView(mFloatLayout);
flag=true;
}
}
}


悬浮窗口布局文件R.id.fx_layout

<?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">
<Button
android:id="@+id/button_f"
android:text="@string/app_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>


2 配置文件中加入权限和配置FxService

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


3启动FxService

Intent intent = new Intent(getActivity(), FxService.class);
getActivity().startService(intent);


demo下载:http://download.csdn.net/detail/qq_17525769/9695640
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  悬浮窗口 service