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点击打开链接