windowmanagerservice demo
时间: 2023-07-23 15:31:13 浏览: 92
windows service demo
这里提供一个简单的WindowManagerService的Demo,可以创建一个简单的悬浮窗口。
首先,在AndroidManifest.xml中声明权限:
```xml
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
```
然后,在MainActivity中创建一个悬浮窗口:
```java
public class MainActivity extends AppCompatActivity {
private WindowManager windowManager;
private WindowManager.LayoutParams layoutParams;
private View floatView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取WindowManager
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
// 创建一个悬浮窗口
floatView = LayoutInflater.from(this).inflate(R.layout.float_view, null);
layoutParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ?
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY :
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT
);
layoutParams.gravity = Gravity.TOP | Gravity.LEFT;
layoutParams.x = 0;
layoutParams.y = 0;
// 添加到WindowManager中
windowManager.addView(floatView, layoutParams);
// 设置悬浮窗口的点击事件
floatView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Click", Toast.LENGTH_SHORT).show();
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
// 从WindowManager中移除悬浮窗口
windowManager.removeView(floatView);
}
}
```
其中,float_view.xml是悬浮窗口的布局文件,可以自行定义。在以上代码中,我们通过WindowManager来创建一个悬浮窗口,并且设置了它的一些属性,例如大小、位置、层级、透明度等。最后,我们将悬浮窗口添加到了WindowManager中,并且设置了它的点击事件。当Activity销毁时,我们需要将悬浮窗口从WindowManager中移除,以免出现内存泄漏等问题。
阅读全文