Ответ 1
Вы можете решить проблему, которая будет вырезана из кода ниже.
dialog.getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
Я использовал тему диалога для Activity, и он отлично работает на Android <= 4.3, но не на последней версии KitKat 4.4. Вот скриншот проблемы:
Верх макета отсутствует. Вы можете видеть, что границы, кажется, сокращены.
Я использую эмулятор Android для тестирования приложения, поэтому я не знаю, связана ли проблема с виртуальной машиной или по какой-то другой причине.
Вы можете решить проблему, которая будет вырезана из кода ниже.
dialog.getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
Вы должны расширить диалог и в вызове 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);
}
Наконец, я попытался что-то сделать с новым режимом 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);
}
У меня аналогичная проблема, но с использованием специального диалога. К сожалению, я не смог опубликовать свой снимок экрана.
Я тестировал несколько различных опций и смотрю, как работает родительская активность в полноэкранном режиме. Если я удалю следующий код, кажется, что диалог работает нормально.
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
Я заметил это после получения обновления 4.4 KitKat на Google Nexus 7 (первая версия). Кроме того, кажется, что это не имеет никакого значения, если у меня есть название диалога или нет.
Просто добавьте эту строку кода в свой метод onCreate.
getWindow(). setFlags (0x04000000, 0x04000000);//FLAG_TRANSLUCENT_STATUS
У меня была такая же проблема, как вы описываете и показываете на скриншотах. Проблема произошла только на 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">