在iOS中,你可能发现页面会整体拉升到状态栏,整个页面效果就会显得更加的高端大气上档次,在Android4.4以后其实也有这种效果的实现,下面我就说一下在进行这种效果实现时碰到的一些坑,希望对大家有一些帮助吧。

首先来说一下关于这种效果的一些额外设置:

windowActionBar:这个应该大家都知道,在自定义的Theme中设置成false,就没有系统默认的那个菜单选项了。

windowNotTitle: 设置这个属性为true则不显示标题了

colorPrimary:这个属性是你的actiinbar的属性颜色

colorPrimaryDark:这个属性则是你的标题栏的颜色,你可以设置和你自定义的标题栏一个颜色,就可以达到以下这种效果

接下来我们看看windowTranslucentStatus属性与windowTranslucentNavigation属性的设置,首先,我们要知道,Android版本到4.4才会有个属性,所以说不管你是在代码中进行实现或者是在资源文件style中进行实现,
你都需要进行版本的控制。首先在资源文件中进行实现,你要创建一个新的文件夹,value-v19,在这个文件夹中创建
style文件进行编辑,在其中设置主题,定义属性
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
然后给你的activity设置这个style,第一个属性很明显就是可以拉升到顶部状态栏,并且定义顶部状态栏透明,这样你的页面就是一整张了,没有上面电池背景条之类的了,整个页面看上去会好很多,】
第二个属性,是设置你的虚拟键透明,这个虚拟键就是返回和菜单键等,现在有的手机会放到屏幕上,而有的是没有的。到这个时候,如果你的手机有虚拟键的话,你会发现问题来了,你会发现你的页面拉伸到了虚拟键的下面,
也就是页面填充了整个屏幕,不留一点空间了,如果你是列表的话,那么无所谓,并不影响操作和页面效果,如果你的是最下面有按钮的页面的话,你会发现这玩意就是一个坑啊,
因为你的按钮填充到了下面,你根本按不到,而且如果你设置了透明属性的话,你会发现虚拟键和你最下面的按钮都重合在一起,具体效果
图如下图所示:


然后你开始在style里改变两个属性的所有制测试,发现都没有什么卵用,我不知道还有没有其他的解决办法,反正当我做到这里的时候,认定了它就是一个巨坑。
在你的布局文件中设置fitsSystemWindows这个属性其实也不会拉升到最下面,但是这样的话。。。。连上面都不拉伸了,有什么意义,而且好像设置了以后,你设置的
colorPrimaryDark也会无效,也可能是我的水平不行,反正被这个地方坑了好久。
但是不要急,办法总是人想出来,在xml文件中进行设置既然不方便,不灵活,那么我们就试试去Java代码中设置这个属性。
根绝前面说的那个坑,我们先判断一下你的手机是否含有NavigationBar这个东西,就是虚拟键,判断代码如下

public static boolean isHaveNavigationBar(Context context) {

    boolean isHave = false;
Resources rs = context.getResources();
int id = rs.getIdentifier("config_showNavigationBar", "bool", "android");
if (id > 0) {
hasNavigationBar = rs.getBoolean(id);
}
try {
Class systemPropertiesClass = Class.forName("android.os.SystemProperties");
Method m = systemPropertiesClass.getMethod("get", String.class);
String navBarOverride = (String) m.invoke(systemPropertiesClass, "qemu.hw.mainkeys");
if ("1".equals(navBarOverride)) {
isHave = false;
} else if ("0".equals(navBarOverride)) {
isHave = true;
}
} catch (Exception e) {
Log.w("TAG", e);
} return isHave;
}
返回为true的话就不给他设置,反之设置,具体代码如下:

public static void transportStatus(Activity context){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        context.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        if (!isHaveNavigationBar(context))
            context.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        }
}

这样就可以达到想要的效果了.

https://blog.csdn.net/zjt593688/article/details/52606980

Android中windowTranslucentStatus与windowTranslucentNavigation的一些设置(转)的更多相关文章

  1. Android中TextView和EditView常用属性设置

    Android中TextView和EditView常用属性设置 点击跳转

  2. Android中直播视频技术探究之---摄像头Camera视频源数据采集解析

    一.前言 在视频直播中一般都是两种视频数据源,一个是摄像头数据,一个是录制桌面数据,而一般来说美女妹子直播都是来自于摄像头数据,游戏直播都是录制桌面数据的,那么今天就来看看第一个数据源数据采集分析,A ...

  3. Android中Listview点击item不变颜色以及设置listselector 无效

    Android中Listview点击item不变颜色以及设置listselector 无效 这是同一个问题,Listview中点击item是会变颜色的,因为listview设置了默认的listsele ...

  4. Android中的颜色设置

    1.在android中经常看到设置的颜色为八位的十六进制的颜色值,例如 public static final class color { public static final int lightb ...

  5. android中ColorStateList及StateListDrawable设置Selector

    写过android的代码相信大家对Selector并不陌生吧,下面来看看这段xml文件是如何定义的 <?xml version="1.0" encoding="ut ...

  6. Android中设置TextView的颜色setTextColor

    tv.setTextColor(Color.parseColor("#FFFFFF")); tv.setTextColor(Color.WHITE); tv.setTextColo ...

  7. Android中如何设置RadioButton在文字的右边,图标在左边

    from:http://blog.csdn.net/sunnyfans/article/details/7901592?utm_source=tuicool&utm_medium=referr ...

  8. Android中xml设置Animation动画效果详解

    在 Android 中, Animation 动画效果的实现可以通过两种方式进行实现,一种是 tweened animation 渐变动画,另一种是 frame by frame animation ...

  9. 【原创】如何在Android中为TextView动态设置drawableLeft等

    如何在Android中为TextView动态设置drawableLeft等   两种方式:   方式1:手动设置固有边界 Drawable drawable = getResources().getD ...

随机推荐

  1. Lucene.Net简介

    说明:Lucene.Net 只是一个全文检索开发包 .查询数据的时候从Lucene.Net查询数据.可以看做是一个提供了全文检索功能的数据库. 注意:只能搜索文本字符串. 重要概念:分词,基于词库的分 ...

  2. 一.hadoop入门须知

    目录: 1.hadoop入门须知 2.hadoop环境搭建 3.hadoop mapreduce之WordCount例子 4.idea本地调试hadoop程序 5.hadoop 从mysql中读取数据 ...

  3. Hibernate之关联关系映射(一对多和多对一映射,多对多映射)

    ~~~接着之前的Hibernate框架接着学习(上篇面试过后发现真的需要学习一下框架了,不然又被忽悠让去培训.)~~~ 1:Hibernate的关联映射,存在一对多和多对一映射,多对多映射: 1.1: ...

  4. vue2.0以上版本安装sass(scss)

    一.首先说明sass和scss的区别. 1.异同:1)简言之可以理解scss是sass的一个升级版本,完全兼容sass之前的功能,又有了些新增能力.语法形式上有些许不同,最主要的就是sass是靠缩进表 ...

  5. iOS 技术篇:__VA_ARGS__实现自定义NSLog

    系统的NSLog 我个人觉得有bug时,没准确的说明哪一行出现的问题,所以为了方便自己开发查找问题,附上自己的NSLog 创建定义方式: 1:在创建好的pch文件里 配置: 2:在pch文件里添加上这 ...

  6. sql注入总结(一)--2018自我整理

    SQL注入总结 前言: 本文和之后的总结都是进行总结,详细实现过程细节可能不会写出来~ 所有sql语句均是mysql数据库的,其他数据库可能有些函数不同,但是方法大致相同 0x00 SQL注入原理: ...

  7. 9,EasyNetQ-版本化消息

    要启用对版本化消息的支持,您需要确保配置所需的组件. 最简单的方法是: var bus = RabbitHutch.CreateBus( "host=localhost", ser ...

  8. 2016年3月12日Android学习笔记

    1. //此句不能忘,否则onFling左右滑动不起作用 mLlExamView.setLongClickable(true); mLlExamView.setOnTouchListener(new ...

  9. 安装ansible集群管理和配置密钥互信

    ansible特性 (1).no agents:不需要在被管控主机上安装任何客户端: (2).no server:无服务器端,使用时直接运行命令即可: (3).modules in any langu ...

  10. CocosCreator内置函数实现物体拖动

    通过CocosCreator由内置的cc.Node.EventType.MOUSE_MOVE鼠标(触摸)事件实现,返回参数为鼠标的坐标值. 根据鼠标的x,y实现物体的移动,即将鼠标放置在该节点上,实现 ...