在Android 7上,我的“来电储物柜”应用程序运行良好,并且我隐藏了“来电”对话框,但在Android 8来电对话框中始终显示在“活动”上方。
int LAYOUT_FLAG;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
}
WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT, LAYOUT_FLAG, 263464,
WindowManager.LayoutParams.WRAP_CONTENT);
mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
winMangr = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
getWindow().setAttributes(params);
wraprView = new RelativeLayout(getBaseContext());
View.inflate(this, mLayout, wraprView);
winMangr.addView(wraprView, params);
这里有一些屏幕截图
Android 7
Android 8
答案 0 :(得分:0)
您可以注册窗口焦点更改事件,然后发送android.intent.action.CLOSE_SYSTEM_DIALOGS广播以关闭所有系统对话框。
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (! hasFocus) {
Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
sendBroadcast(closeDialog);
}
}
但是请注意,这样做将强制关闭所有系统对话框(包括“关机/重新启动”对话框),从而阻止用户在您的应用程序运行时关闭手机。