android4.4+实现MD状态栏并全屏显示内容

来源:互联网 发布:网络教育不考学位证 编辑:程序博客网 时间:2024/05/21 06:34

原文链接:http://blog.csdn.net/u013260551/article/details/50372991


material design如此之美,美到令人窒息~~(●'◡'●)

今天实现android4.4以上版本符合MD规范的状态栏,并可以全屏显示内容(即内容可以扩展到状态栏下)。

效果图:

android4.4:




android6.0:




好了,效果如上图所示,完美符合MD规范~~

实现其实很简单:

1,首先new module

compileSdkVersion 23buildToolsVersion "23.0.2"defaultConfig {    applicationId "com.science.statusbartest"    minSdkVersion 19    targetSdkVersion 23    versionCode 1    versionName "1.0"}
dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    testCompile 'junit:junit:4.12'    compile 'com.android.support:appcompat-v7:23.1.1'    compile 'com.android.support:design:23.1.1'}

主题如下:

values\style.xml:

<!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">    <!-- Customize your theme here. -->    <item name="colorPrimary">@color/colorPrimary</item>    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>    <item name="colorAccent">@color/colorAccent</item></style><style name="AppTheme.NoActionBar">    <item name="windowActionBar">false</item>    <item name="windowNoTitle">true</item>    <item name="android:windowTranslucentStatus">true</item></style>
values-v21\style.xml:

<style name="AppTheme.NoActionBar">    <item name="windowActionBar">false</item>    <item name="windowNoTitle">true</item>    <item name="android:windowDrawsSystemBarBackgrounds">true</item>    <item name="android:statusBarColor">@android:color/transparent</item></style>

2,布局如下:

<?xml version="1.0" encoding="utf-8"?><android.support.design.widget.CoordinatorLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.science.statusbartest.MainActivity">    <include layout="@layout/content_main"/>    <android.support.design.widget.AppBarLayout        android:id="@+id/appbar"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:theme="@style/AppTheme.AppBarOverlay">        <android.support.v7.widget.Toolbar            android:id="@+id/toolbar"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:background="?attr/colorPrimary"            android:fitsSystemWindows="true"            app:popupTheme="@style/AppTheme.PopupOverlay"/>    </android.support.design.widget.AppBarLayout>    <android.support.design.widget.FloatingActionButton        android:id="@+id/fab"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="bottom|end"        android:layout_margin="@dimen/fab_margin"        android:src="@android:drawable/ic_dialog_email"/></android.support.design.widget.CoordinatorLayout>

content_main是一个listview;

重点如下:1,Toolbar的layout_height为wrap_content;

    2,给Toolbar添加fitsSystemWindows="true";


3,主要代码如下:

在onCreate方法里添加如下代码:

1    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);2    setContentView(R.layout.activity_main);3    StatusBarCompat.compat(this);
第一行代码表示Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态栏遮住;(其实在style里可以加windowTranslucentStatus也可以    实现Activity全屏显示类似的效果,那么就不需要第三行代码了,不过发现此时状态栏的灰度遮罩层比正常的颜色更深了,这样感觉就比较难看了,最后在stackoverflow找到了类似问题,加上了这一行代码。不知为何加了windowTranslucentStatus后状态栏颜色变深~~哪位同学可否知道?)

第三行代码就是实现MD规范,给状态栏加上一层比标题栏稍微深一点的颜色,代码出自鸿神(●'◡'●),不过稍微改了一下~~


4,其它代码主要是listview的上下拉显示和隐藏头部和尾部的view,见上上次的博客~~


代码:http://download.csdn.net/detail/u013260551/9370899点击打开链接


0 0