На основе этих ответов:
Я построил следующий код с целью скрытьКлавиша
, в то время как мой View
виден на экране, но безуспешно, а затем попросите вас сказать, где я ошибаюсь.Я считал, что с Immersive Mode
может работать уже, что очень рекомендуется другими разработчиками, но в моем случае не сработало: - (
Любое предложение будет оценено.
Код:
static WindowManager windowManager;
static FrameLayout frameLayout;
public static int createOverlay() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
if (!Settings.canDrawOverlays(ctx)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + ctx.getPackageName()));
ctx.startActivity(intent);
return -1;
}
int type = 0;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
}
frameLayout = new FrameLayout(ctx);
frameLayout.setBackgroundColor(Color.BLACK);
//frameLayout.setAlpha(0.5f);
windowManager = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY/*type*/,
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED
| WindowManager.LayoutParams.FLAG_FULLSCREEN
| WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
PixelFormat.RGBA_8888);
//params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
params.height = mRealSizeHeight;
params.width = mRealSizeWidth;
frameLayout.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE);
windowManager.addView(frameLayout, params);
//add your view to this frameLayout
// frameLayout.addView(....);
return 0;
}
public static void removeOverlay() {
if (windowManager != null && frameLayout != null) {
windowManager.removeView(frameLayout);
}
}
public static void hideOverlay() {
frameLayout.setVisibility(View.INVISIBLE);
}
public static void showOverlay() {
frameLayout.setVisibility(View.VISIBLE);
}