21

我为 Activity 使用了对话框主题,它在 Android <= 4.3 上运行良好,但在最新的 KitKat 4.4 上运行良好。这是问题的屏幕截图:

对话框android 4.4问题

缺少顶部布局。你可以看到边界似乎被切断了。

我正在使用Android模拟器来测试应用程序,所以我不知道问题是由于虚拟机还是由于其他原因。

4

6 回答 6

36

您可以解决从下面的代码中删除的问题。

dialog.getWindow().setFlags(
    WindowManager.LayoutParams.FLAG_FULLSCREEN, 
    WindowManager.LayoutParams.FLAG_FULLSCREEN);
于 2013-11-29T08:40:18.940 回答
9

您应该扩展 Dialog 并在 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);
}
于 2013-12-26T09:34:33.413 回答
3

最后,我尝试使用 Android 4.4 中提供的新全屏沉浸式模式来做一些事情。安卓全屏

只需将其放在“对话框”活动的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);
}
于 2013-11-25T14:12:17.447 回答
1

我有类似的问题,但使用自定义对话框。不幸的是,我无法在此处发布我的屏幕截图。

我用几个不同的选项进行了测试,看起来在全屏模式下运行父活动会影响这一点。如果我删除以下代码,对话框似乎工作正常。

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

在 Google Nexus 7(第一版)上获得 4.4 KitKat 更新后,我注意到了这一点。此外,是否存在对话框的标题似乎没有什么区别。

于 2013-11-25T09:23:56.923 回答
0

只需在活动的onCreate方法中添加这行代码即可。

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

于 2013-11-28T03:38:09.333 回答
0

我遇到了与您在屏幕截图中描述和显示的完全相同的问题。问题仅发生在 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>

为了解决这个问题,我删除了 parent 属性,所以第一行现在看起来像下一个:

<style name="transparent_low_dim">
于 2014-01-15T16:30:48.603 回答