Подтвердить что ты не робот

Диалог на Android KitKat, похоже, вырезано

Я использовал тему диалога для Activity, и он отлично работает на Android <= 4.3, но не на последней версии KitKat 4.4. Вот скриншот проблемы:

dialog android 4.4 problem

Верх макета отсутствует. Вы можете видеть, что границы, кажется, сокращены.

Я использую эмулятор Android для тестирования приложения, поэтому я не знаю, связана ли проблема с виртуальной машиной или по какой-то другой причине.

4b9b3361

Ответ 1

Вы можете решить проблему, которая будет вырезана из кода ниже.

dialog.getWindow().setFlags(
    WindowManager.LayoutParams.FLAG_FULLSCREEN, 
    WindowManager.LayoutParams.FLAG_FULLSCREEN);

Ответ 2

Вы должны расширить диалог и в вызове onCreate следующим образом:

@TargetApi(14)
public void toggleHideBar() {

    if (Build.VERSION.SDK_INT < 18) {
        return;
    }

    // The UI options currently enabled are represented by a bitfield.
    // getSystemUiVisibility() gives us that bitfield.
    int uiOptions = getWindow().getDecorView().getSystemUiVisibility();
    int newUiOptions = uiOptions;
    boolean isImmersiveModeEnabled =
            ((uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) == uiOptions);
    if (isImmersiveModeEnabled) {
        Log.d("dialog", "Turning immersive mode mode off.");
    } else {
        Log.d("dialog", "Turning immersive mode mode on.");
    }

    // Status bar hiding: Backwards compatible to Jellybean
    if (Build.VERSION.SDK_INT >= 16 && (newUiOptions & View.SYSTEM_UI_FLAG_FULLSCREEN) <= 0) {
        newUiOptions ^= View.SYSTEM_UI_FLAG_FULLSCREEN;
    }

    // Immersive mode: Backward compatible to KitKat.
    // Note that this flag doesn't do anything by itself, it only augments the behavior
    // of HIDE_NAVIGATION and FLAG_FULLSCREEN.  For the purposes of this sample
    // all three flags are being toggled together.
    // Note that there are two immersive mode UI flags, one of which is referred to as "sticky".
    // Sticky immersive mode differs in that it makes the navigation and status bars
    // semi-transparent, and the UI flag does not get cleared when the user interacts with
    // the screen.
    if (Build.VERSION.SDK_INT >= 18 && (newUiOptions & View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) <= 0) {
        newUiOptions ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
    }

    getWindow().getDecorView().setSystemUiVisibility(newUiOptions);
}

Ответ 3

Наконец, я попытался что-то сделать с новым режимом FullScreen Immersive, доступным в Android 4.4. Android FullScreen

Просто поместите это в onResume из диалога ", и это позволит вам использовать диалоги в полноэкранном режиме без верхней резки:)

Изменить: добавлена ​​проверка совместимости для целевой версии, setSystemUiVisibility реализована в Api 11, но, похоже, она нужна для исправления только для Android 4.4)

// Only for Api >=4.0 
if (android.os.Build.VERSION.SDK_INT >= 16) {
    int mUIFlag = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION // I removed this
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; // and this to keep the navigation bar
    getWindow().getDecorView().setSystemUiVisibility(mUIFlag);
}

Ответ 4

У меня аналогичная проблема, но с использованием специального диалога. К сожалению, я не смог опубликовать свой снимок экрана.

Я тестировал несколько различных опций и смотрю, как работает родительская активность в полноэкранном режиме. Если я удалю следующий код, кажется, что диалог работает нормально.

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

Я заметил это после получения обновления 4.4 KitKat на Google Nexus 7 (первая версия). Кроме того, кажется, что это не имеет никакого значения, если у меня есть название диалога или нет.

Ответ 5

Просто добавьте эту строку кода в свой метод onCreate.

getWindow(). setFlags (0x04000000, 0x04000000);//FLAG_TRANSLUCENT_STATUS

Ответ 6

У меня была такая же проблема, как вы описываете и показываете на скриншотах. Проблема произошла только на KitKat.

В моем случае это произошло в некоторых диалоговых окнах всплывающих окон, которые использовали пользовательский стиль. Далее следует стиль, который воспроизводит проблему при использовании диалога. Обратите внимание на первую строку, которая имеет атрибут parent = "android.Theme" , удалив этот атрибут, проблема была решена.

<style name="transparent_low_dim" parent="android:Theme">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">true</item>
    <item name="android:backgroundDimAmount">0.3</item>
    <item name="android:windowAnimationStyle">@null</item>
</style>

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

<style name="transparent_low_dim">