android的Dialog全屏、activity大小的设置详解

引言:一搬的Dialog系统默认是不允许全屏的,下面我们介绍几种Dialog全屏的方式

第一、

final Dialog dialog = new Dialog(WenDetailActivity.this, R.style.popupDialog);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.wen_cover_pager);
        dialog.setCanceledOnTouchOutside(false);
        dialog.setCancelable(false);
dialog.show();

style的样式:

<span style="font-size:14px;"><style name="popupDialog" parent="@android:style/Theme.Light.NoTitleBar.Fullscreen">
        <item name="android:windowBackground">@drawable/filled_activity_bg</item>
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <!--<item name="android:windowAnimationStyle">@style/dialog_animation</item>-->
        <item name="android:colorBackgroundCacheHint">@null</item>
        <item name="android:backgroundDimAmount">0.6</item><!-- 灰度 -->
        <item name="android:windowFullscreen">true</item>
    </style></span>

第二、

我们也可以自定义Dialog,首先继承Dialig,然后再构造函数中添加

super(context, android.R.style.Theme);

setOwnerActivity((Activity)context);

第三、

又或者我们设置://dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

也可以让我们的Dialog全屏显示。

注意:按照上述方式设置Dialog全屏,有些朋友可能会发现,Dialog全屏好像并不是我们想要的,因为它把状态栏也遮住了,有时候我们只是想让它遮住标题栏,就是和我们的activity一样大小,就这个问题下面小编介绍一种设置Dialog和activity一样大小的方法。

第三、

首先介绍一个方法:getDecorView()

decorView是window中的最顶层view,可以从window中获取到decorView,然后decorView有个getWindowVisibleDisplayFrame方法可以获取到程序显示的区域,包括标题栏,但不包括状态栏。

  于是,我们就可以算出状态栏的高度了。

        Rect frame = new Rect();

        getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);

        int statusBarHeight = frame.top;

同样我们获取标题栏的高度

getWindow().findViewById(Window.ID_ANDROID_CONTENT)这个方法获取到的view就是程序不包括标题栏的部分,然后就可以知道标题栏的高度了,代码如下:

int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();

int titleBarHeight = contentTop - statusBarHeight; //statusBarHeight是上面所求的状态栏的高度

最后:知道上述原理,我们就可以设置我们的Dialog和activity一样大了,Java代码如下:

final Dialog dialog = new Dialog(WenDetailActivity.this, R.style.popupDialog);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.wen_cover_pager);
        dialog.setCanceledOnTouchOutside(false);
        dialog.setCancelable(false);
        WindowManager.LayoutParams lay = dialog.getWindow().getAttributes();
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        Rect rect = new Rect();
        View view = getWindow().getDecorView();//decorView是window中的最顶层view,可以从window中获取到decorView
        view.getWindowVisibleDisplayFrame(rect);
        lay.height = dm.heightPixels - rect.top;
        lay.width = dm.widthPixels;

style.xml如下:

<style name="popupDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowBackground">@drawable/filled_activity_bg</item>
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <!--<item name="android:windowAnimationStyle">@style/dialog_animation</item>-->
        <item name="android:colorBackgroundCacheHint">@null</item>
        <item name="android:backgroundDimAmount">0.6</item><!-- 灰度 -->
        <!--<item name="android:windowFullscreen">true</item>-->
    </style>

时间: 2024-10-11 00:04:19

android的Dialog全屏、activity大小的设置详解的相关文章

Android dialog 全屏

Android中让Dialog全屏: 一.在style中定义样式: <?xml version="1.0" encoding="utf-8"?> <resources> <style name="Transparent"> <item name="android:windowBackground">@color/transparent_background</item>

android tv 实现全屏画竖线

自定义view 采用canvas双缓冲的方式,可以减少绘制的时间,提升性能. StaggeredView.java 源代码如下: package com.xxx.demo; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; impor

Android应用程序全屏显示方法

导入两个包: import android.view.Window; import android.view.WindowManager; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(W

android开发:全屏和退出全屏

android开发:全屏和退出全屏 from://http://blog.csdn.net/dyllove98/article/details/8831933 2013-04-21 20:31 413人阅读 评论(0) 收藏 举报 xml代码: <Button android:id="@+id/button5" android:layout_width="wrap_content" android:layout_height="wrap_conten

audio与video控件/标签的隐藏,iso/Android下自动全屏播放,短暂黑屏问题

(一)audio音频标签 <audio src="xxx.mp3"></audio> (二)video视频标签 <video src="xxx.mp4"></video> (三)使用video代替audio (1) 有时候audio标签被屏蔽,不能被浏览器解释通过,可以选择使用video来代替: <video src="xxx.mp3"></video> (2) 若想要将音乐

Android基础入门教程——2.3.2 EditText(输入框)详解

Android基础入门教程--2.3.2 EditText(输入框)详解 标签(空格分隔): Android基础入门教程 本节引言: 上一节中我们学习了第一个 UI控件TextView(文本框),文中给出了很多实际开发中可能遇到的一些需求 的解决方法,应该会为你的开发带来便利,在本节中,我们来学习第二个很常用的控件EditText(输入框): 和TextView非常类似,最大的区别是:EditText可以接受用户输入!和前面一样,我们不一个个讲属性, 只讲实际应用,要扣属性可以自己查看API文档

Activity界面绘制过程详解

Activity界面绘制过程详解 设置界面首先就是Activity.setContentView()方法:我们先看一下他的源码: /** * Set the activity content from a layout resource. The resource will be * inflated, adding all top-level views to the activity. * * @param layoutResID Resource ID to be inflated. *

Android M新特性Doze and App Standby模式详解

参考: Optimizing for Doze and App Standby Android M新特性Doze and App Standby模式详解 深入android6.0 设备 idle状态 Android M 的 Doze 模式下第三方推送服务还能用吗? 一.Optimizing for Doze and App Standby 从Android6.0开始,Android提供了两种省电延长电池寿命的功能:Doze和App Standby: 表现形式:当设备没有连接到电源,设备进入Doz

转: Android 软件开发之如何使用Eclipse Debug调试程序详解(七)

转自: http://www.uml.org.cn/mobiledev/201110092.asp Android 软件开发之如何使用Eclipse Debug调试程序详解(七)   发布于2011-10-09   1.在程序中添加一个断点 如果所示:在Eclipse中添加了一个程序断点 在Eclipse中一共有三种添加断点的方法 第一种: 在红框区域右键出现菜单后点击第一项 Toggle Breakpoint 将会在你右键代码的哪一行添加一个程序断点 (同样的操作方可取消程序断点) 第二种: