最近项目中需要将Presentation改成Dialog实现,发现在xml里面写matchparent,并且在dialog的theme里面设置
<item name="android:windowFullscreen">true</item>
<item name="android:windowNoTitle">true</item>
都不会使dialog全屏的问题。后来查阅文献,找到两种解决办法。不过显示效果会不一样。
首先,设置Dialog的theme属性如下(部分属性是我项目使用的,与此无关)
<style name="single_fullscreen_dialog_theme" parent="android:style/Theme.Dialog">
<!--是否全屏-->
<item name="android:windowFullscreen">true</item>
<!--背景颜色及透明程度-->
<item name="android:windowBackground">@android:color/transparent</item>
<!--是否有标题 -->
<item name="android:windowNoTitle">true</item>
<!--是否浮现在activity之上-->
<item name="android:windowIsFloating">true</item>
<!--是否模糊-->
<item name="android:backgroundDimEnabled">false</item>
<!-- 对话框是否有遮盖 -->
<item name="android:windowContentOverlay">@null</item>
<!-- 背景缓存颜色 -->
<item name="android:colorBackgroundCacheHint">@null</item>
<!-- 弹出或者进入时的动画效果 -->
<!--<item name="android:windowAnimationStyle">@style/dialog_animation</item>-->
</style>
方法一:在setContentView之后调用
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
这种的显示效果会遮挡系统状态栏。
方法二:重写show方法
@Override
public void show() {
super.show();
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) mContentview.getLayoutParams();
DisplayMetrics dm = new DisplayMetrics();
WindowManager manager = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
manager.getDefaultDisplay().getMetrics(dm);
layoutParams.width = dm.widthPixels;
layoutParams.height = dm.heightPixels;
mContentview.setLayoutParams(layoutParams);
}
mContentView是根布局。
这种的显示效果不会遮挡系统状态栏。