我使用了一个Activity的对话框主题,它在Android< = 4.3上工作正常但在最新的KitKat 4.4上没有。 这是问题的截图:
缺少布局的顶部。 你可以看到界限似乎被削减了。
我正在使用Android模拟器来测试应用,因此我不知道问题是由于虚拟机还是由于其他原因造成的。
答案 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">