我的上一篇文章:设置DialogFragment全屏显示 可以设置对话框的内容全屏显示,但是存在在某些机型上顶部的View被状态栏遮住的问题。经过测试,发现了一种解决办法,在DialogFragment的onCreateView()中添加一个布局监听器:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
//此处rootView是对话框的顶层View
rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int[] location = new int[2];
rootView.getLocationOnScreen(location);
int y = location[1];
if (y == 0) {
//此处的topMarginView是被状态栏覆盖的View
ViewGroup.MarginLayoutParams params
= (ViewGroup.MarginLayoutParams)topMarginView.getLayoutParams();
params.topMargin += BarUtils.getStatusBarHeight();
topMarginView.setLayoutParams(params);
rootView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
}
});
}

这种方法是通过监听对话框内容布局顶层View在屏幕中的位置来解决的,如果顶层View在屏幕中的y位置为0,则表示其已经被状态栏所遮住,然后将被遮住的View向下移动状态栏的高度即可。

这种方式显然不够优雅,如果读者能有更好的方法,欢迎留言。

本文地址,如有更多疑问,请参考我的其它Android相关博客:我的博客地址

Android开发 - 解决DialogFragment在全屏时View被状态栏遮住的问题的更多相关文章

  1. Android开发(十三)——全屏滚动与listview

    Android全屏滚动使用scrollview,其中有需要采用listview进输出的内容,scrollview与listview冲突. 开始的思维是使用一个Scrollview加上一个ListVie ...

  2. Android开发(一)——全屏或者取消标题栏

    先介绍去掉标题栏的方法: 第一种:也一般入门的时候经常使用的一种方法 requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏 注意这句一定要写在se ...

  3. Android开发 - 设置DialogFragment全屏显示

    默认的DialogFragment并不是全屏,但有些需求需要我们将对话框设置为全屏(内容全屏),Android并没有提供直接的API,通过其它不同的方法设置全屏在不同的机型上总有一些诡异的问题,经过测 ...

  4. HBuilder开发iPad程序不能全屏显示的解决方法

    HBuilder开发iPad程序不能全屏显示的解决方法: targets选择HBuilder=>Deployment Info=> devices选择Universal即可

  5. Android 高大上的侧滑菜单DrawerLayout,解决了不能全屏滑动的问题

    DrawerLayout预览 DrawerLayout主要功能就是 实现侧滑菜单效果的功能,并且可以通过增加一些设置来实现高大上的效果,那么就请看动态图:   注意左上角那个图标,有木有很好玩,哈哈. ...

  6. Android UI体验之全屏沉浸式透明状态栏效果

    前言: Android 4.4之后谷歌提供了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏. 虚拟按键动态隐藏, 应用可以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 身临其境 的体 ...

  7. Android之针对WebView的全屏播放

    转载请标明转载处:http://bbs.csdn.net/topics/390839259 本人刚学android,菜鸟一个,第一次写帖子,最近因为项目要用webview加载html5的视频,开始不能 ...

  8. Android中使用WebView实现全屏切换播放网页视频

    首先写布局文件activity_main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an ...

  9. VMware全屏时, 隐藏上方工具栏横条

    VMware全屏时, 隐藏上方横条 菜单栏打开 编辑 选择 首选项 找到 显示 取消勾选 在全屏时取消固定时显示工具栏边缘

随机推荐

  1. sqlserver float小数存数据库变成多位了 比如说12.23存进去变成 12.229999998 甚至更长

    使用 numeric(12,2)的数据类型,或者decimal(12,2)   追问 不能随意修改表结构 有别人办法么 程序上控制的 追答 那你就不用管他了,所谓 浮点数,必然是这么存储的.

  2. leetcode560

    public class Solution { public int SubarraySum(int[] nums, int k) { , result = ; Dictionary<int, ...

  3. ZStack串口通信

    要使用ZStack就不得不先了解ZStack的OSAL工作原理 http://blog.csdn.net/qinpeng_zbdx/article/details/20990797 http://we ...

  4. intellij ideal 在erlang 开发环境遇到的一些小问题

    由于之前重装电脑,公司电脑上的erlang开发环境重新搭建了,但是由于导入项目错误,直接将项目删掉重新又导入了一次,但是发现使用的sdk在联想输入方面出现了问题,写个东西记一下自己犯的错误. 修正方法 ...

  5. 关于页面缩放时css错乱的处理方法---之一

    这几天遇到一个问题,就是在做网页的时候,页面缩放时,布局就乱了,原来的样子不会跟随缩放的放大或者缩小进行改变,直接导致的后果,就是页面很难看,无法使用 之前虽然写了代码,但是一直没有注意到缩放后页面的 ...

  6. 使用wireshark以及filddler配合抓去手机端的TCP以及HTTP请求

    在测试手机客户端时,有时候需要查看网络请求状况.使用在IDE中查看log的方式,能够解决问题,但是会比较复杂.wireshark不能够做代理,而fiddler主要是抓HTTP请求,没有wireshar ...

  7. Codeforces Round #439 C. The Intriguing Obsession

    题意:给你三种不同颜色的点,每种若干(小于5000),在这些点中连线,要求同色的点的最短路大于等于3或者不连通,求有多少种连法. Examples Input 1 1 1 Output 8 Input ...

  8. HDU2665 求区间第K大 主席树

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2665 代码: //#include<bits/stdc++.h> #include< ...

  9. redis在windows系统下的安装和两个问题

    今天首次接触redis,遇到一些问题,查了一些资料,在这里汇总整理下. redis的安装看这个:http://www.runoob.com/redis/redis-install.html. 问题1: ...

  10. AngularJS学习笔记(一)

    一.基本指令 1.ng-app=" " 指令初始化一个 AngularJS 应用程序,定义angularJS的使用范围; tips:一个页面里创建多个 ng-app 手动加载即可: ...