您的位置:首页 > 移动开发 > Android开发

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

2015-12-21 17:43 429 查看
material design如此之美,美到令人窒息~~(●'◡'●)

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

效果图:

android4.4:





android6.0:





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

实现其实很简单:

1,首先new module

compileSdkVersion 23
buildToolsVersion "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点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: