Скрытая панель навигации (нижняя панель с кнопками «Домой», «Назад» и «Обзор») отображается после отображения диалогового окна или если EditText получает фокус

Существует полноэкранная активность со следующими блоками кода, используемыми для достижения того же:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.activity_main);

// ….
}

@Override
    protected void onResume() {
        Log.i(TAG, "onResume");

        super.onResume();
        View decorView = getWindow().getDecorView();
        decorView.setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                        // Set the content to appear under the system bars so that the
                        // content doesn't resize when the system bars hide and show.
                        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        // Hide the nav bar and status bar
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_FULLSCREEN);
    }

Однако, когда отображается пользовательское диалоговое окно или если текст редактирования получает фокус, нижняя панель навигации становится видимой и остается на месте. Официальный документ говорит:

Если на переднем плане появляется новое действие или диалоговое окно, которое получает фокус и частично закрывает выполняемое действие, скрытое действие теряет фокус и переходит в состояние «Приостановлено». Затем система вызывает для него onPause().

Когда охваченная активность возвращается на передний план и восстанавливает фокус, она вызывает onResume().

Но onResume() не вызывается, когда диалог теряет фокус (проверено по логам).

Также попытался добавить следующий код в onCreate() пользовательского диалога:

View decorView = getWindow().getDecorView();
        decorView.setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                        // Set the content to appear under the system bars so that the
                        // content doesn't resize when the system bars hide and show.
                        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        // Hide the nav bar and status bar
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_FULLSCREEN);

После добавления приведенного выше кода панель навигации скрывается, когда пользовательский диалог находится на переднем плане, но когда он выходит из фокуса, панель навигации снова появляется на экране.

Также попытался установить полноэкранный режим с помощью стилей. См. ниже то же самое.

<style name="FullScreenTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>

        <item name="android:windowContentTransitions">true</item>
</style>

То же самое и с edittext. Activity запускается в полноэкранном режиме, но как только edittext получает фокус, нижняя панель навигации видна и остается на месте.

Мы будем признательны за любой вклад.

Ваше здоровье!


person sats    schedule 15.12.2018    source источник
comment
Вы нашли решение этой проблемы?   -  person mikemike396    schedule 29.01.2019


Ответы (1)


Попробуйте этот код.

fun View.setImmersiveMode() {
    isFocusableInTouchMode = false
    setOnClickListener {
        requestFocusFromTouch()
    }
}
editText.setImmersiveMode()
person Justin    schedule 18.02.2020