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 = ;
wmParams.y = ;
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()/;
//25為狀态欄高度
wmParams.y = (int)event.getRawY() - mFloatLayout.getHeight()/ - ;
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