首先,在AndroidManifest.xml加入权限。
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
public class MainActivity extends AppCompatActivity{
private WindowManager mWindowManager;
private WindowManager.LayoutParams layoutParams;
private Button button1;
private Button button2;
private LinearLayout linearLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//检查是否已经授予权限
if (!Settings.canDrawOverlays(this)) {
//若未授权则请求权限
getOverlayPermission();
}
mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
linearLayout = new LinearLayout(getBaseContext());
linearLayout.setOrientation(LinearLayout.VERTICAL);
layoutParams = new WindowManager.LayoutParams();
layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
layoutParams.gravity = Gravity.BOTTOM;
layoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
button1 = new Button(getBaseContext());
button1.setText("test1");
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mWindowManager.removeView(linearLayout);
}
});
button2 = new Button(getBaseContext());
button2.setText("test2");
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mWindowManager.removeView(linearLayout);
}
});
linearLayout.addView(button1);
linearLayout.addView(button2);
mWindowManager.addView(linearLayout,layoutParams);
}
//请求悬浮窗权限
private void getOverlayPermission() {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, 0);
}
}
Android 8中layoutParams.type 只能设成WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,因为源码中做了限制否则会报错。
网友评论