Android KitKat上的对话似乎被削减了

时间:2013-11-21 13:00:08

标签: android dialog android-4.4-kitkat

我使用了一个Activity的对话框主题,它在Android< = 4.3上工作正常但在最新的KitKat 4.4上没有。 这是问题的截图:

dialog android 4.4 problem

缺少布局的顶部。 你可以看到界限似乎被削减了。

我正在使用Android模拟器来测试应用,因此我不知道问题是由于虚拟机还是由于其他原因造成的。

6 个答案:

答案 0 :(得分:36)

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

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

答案 1 :(得分: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);
}

答案 2 :(得分:3)

最后,我尝试使用Android 4.4中提供的全新FullScreen Immersive模式。 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);
}

答案 3 :(得分:1)

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

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

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

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

答案 4 :(得分:0)

只需在活动的 onCreate 方法中添加以下代码。

  

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

答案 5 :(得分: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>

要修复它,我删除了父属性,因此第一行现在看起来就像下一行:

<style name="transparent_low_dim">