编写Android悬浮窗的关键在于使用WindowManager类来创建和管理悬浮窗。下面是一个简单的示例代码来创建一个悬浮窗:
1. 创建一个自定义的悬浮窗Service类(FloatingWindowService.java)继承自Service:
```java
public class FloatingWindowService extends Service {
private WindowManager mWindowManager;
private View mFloatingView;
public FloatingWindowService() {
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
// 初始化WindowManager
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
// 创建悬浮窗视图
mFloatingView = LayoutInflater.from(this).inflate(R.layout.layout_floating_window, null);
// 设置悬浮窗的布局参数
WindowManager.LayoutParams params = 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);
// 设置悬浮窗的初始位置
params.gravity = Gravity.TOP | Gravity.START;
params.x = 0;
params.y = 0;
// 将悬浮窗添加到WindowManager中
mWindowManager.addView(mFloatingView, params);
}
@Override
public void onDestroy() {
super.onDestroy();
// 在Service销毁时移除悬浮窗
if (mFloatingView != null) {
mWindowManager.removeView(mFloatingView);
}
}
}
```
2. 在AndroidManifest.xml文件中声明悬浮窗Service:
```xml
android:name=".FloatingWindowService" android:enabled="true" android:exported="true" /> ``` 3. 创建一个布局文件(layout_floating_window.xml),用于显示悬浮窗的内容。 ```xml android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/rounded_background" android:orientation="vertical" android:padding="10dp"> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Floating Window" android:textColor="#ffffff" android:textSize="14sp" /> ``` 注意:运行此示例代码时,需要在AndroidManifest.xml文件中添加悬浮窗权限: ```xml ``` 可以根据需求对悬浮窗进行自定义修改,如设置点击事件、拖拽移动等。