Android之简单的实现透明状态栏

来源:互联网 发布:鸡啄米 mfc编程入门 编辑:程序博客网 时间:2024/05/01 20:50

今天学习了让界面实现透明状态栏效果,俗称沉侵式状态栏。然后决定写成笔记,记录下学习脚印。以下效果就是要实现的:


    


可以看到界面的标题栏和状态栏的颜色融为一体了,但还是能看到状态栏的图标,这就是透明状态栏,大家也叫它为“沉侵式状态栏”。

这个简单的界面大体的布局我用的是LinearLayout,通过一个自定义的actionBar和一个简单的TextView来实现界面布局。

一、首先新建actionBar.xml:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="44dp"    android:orientation="vertical">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerInParent="true"        android:textColor="#ffffff"        android:text="标题栏" /></RelativeLayout>
一个简单的相对布局RelativeLayout包裹着TextView,并且颜色也没有设置。

二、新建actionBar_immersion.xml:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:clipToPadding="true"    android:fitsSystemWindows="true"    android:layout_width="match_parent"    android:layout_height="64dp"    android:background="@android:color/holo_red_light"    >    <include layout="@layout/actionbar" /></RelativeLayout>
可以看到我在标题栏的外层再次包裹了一个相对布局RelativeLayout,并且设置了两个重要的属性:

1.android:clipToPadding="true"

2.android:fitsSystemWindows="true"

这个布局包括了标题栏和状态栏,所以高度设置为:标题栏高度+状态栏高度,并且颜色设置为红色

三、新建activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context=".MainActivity">    <include layout="@layout/actionbar_immersion" />    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="match_parent">        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="内容"            android:layout_centerInParent="true"/>    </RelativeLayout></LinearLayout>
在主布局中通过include把标题栏引入,再通过一个TextView展示内容文字

四、新建MainActivity.java文件:

import android.app.Activity;import android.os.Build;import android.os.Bundle;import android.view.WindowManager;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {            // 透明状态栏            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);            // 透明导航栏            // getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);        }            }    }



可以看到代码实现了,如果SDK版本大于19的时候才执行透明状态栏效果,并且设置透明状态栏:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);


还可以设置透明的导航栏:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);


并且可以通过代码来动态改变透明状态栏的高度,这个根据不同的需求做不同的处理。
这样就完成了透明状态栏的好看的效果。


源码


1 0
原创粉丝点击