Возможно ли с помощью WindowManager создать панель просмотра (всегда сверху) панели софт-клавиш? - PullRequest
0 голосов
/ 19 сентября 2018

На основе этих ответов:

Я построил следующий код с целью скрытьКлавиша

enter image description here

, в то время как мой 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);
}
...