Android WindowManager悬浮窗
Android WindowManager悬浮窗的实现代码不难,悬浮窗创建成功后将悬浮悬停在设备的屏幕桌面上。悬浮窗通常使用情况:假设APP需要消失在屏幕时候保留一定的操作入口,则可以考虑使用。
需要增加权限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
一个简单的Android WindowManager悬浮窗实现代码:
import android.app.Activity;
import android.content.Context;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
public class MainActivity extends Activity {
private WindowManager windowManager;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 悬浮窗
button = new Button(this);
button.setText("悬浮窗 Zhang Phil @CSDN");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 作为测试,点击后删除该悬浮窗(即Button按钮)
windowManager.removeView(button);
}
});
windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
// 靠手机屏幕的左边居中显示
params.gravity = Gravity.CENTER | Gravity.LEFT;
params.type = WindowManager.LayoutParams.TYPE_PHONE;
params.format = PixelFormat.RGBA_8888;
// 如果设置以下属性,那么该悬浮窗口将不可触摸,不接受输入事件,不影响其他窗口事件的传递和分发
// params.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL
// |LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_NOT_TOUCHABLE;
// 可以设定坐标
// params.x=xxxx
// params.y=yyyy
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
// 透明度
// params.alpha=0.8f;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
windowManager.addView(button, params);
// 更新
// windowManager.updateViewLayout(button, params);
}
}
代码运行结果:
附录文章:
《Android CircularFloatingActionMenu:作为系统级按钮悬浮桌面弹出菜单使用(3)》链接地址:http://blog.csdn.net/zhangphil/article/details/50271303