Android 實現沉浸式狀態列效果(systembartint庫)

騷劍客發表於2016-06-22

本人最近做一個專案需要做到一個沉浸式狀態列效果找了很多資料,最後如願以償.

先附上效果圖:


實現的步驟主要有以下幾點(開發平臺是android studio):

1.設定app全屏:
方法:在AndroidManifest.xml中設定

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Light.NoTitleBar" >
</application>
2.在app中的build.gradle中引入systembartint庫(如果是eclipse開發的可以去網上下載庫)

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
}
3.因為我們專案中很多地方都用到這個沉浸式狀態列,所以我們可以先寫一個基類BaseActivity,然後其它Activity都繼承它就ok了!

import android.annotation.TargetApi;
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;

import com.readystatesoftware.systembartint.SystemBarTintManager;

/**
 * Created by shaolin on 6/22/16.
 */
public class BaseActivity extends Activity {

    private SystemBarTintManager mTintManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initSystemBar(this);
    }

    public void initSystemBar(Activity activity) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            setTranslucentStatus(activity, true);
        }
        mTintManager = new SystemBarTintManager(activity);
        mTintManager.setStatusBarTintEnabled(true);// 使用顏色資源
        mTintManager.setStatusBarTintResource(R.color.theme_color);//設定狀態列的顏色
        SystemBarTintManager.SystemBarConfig config = mTintManager.getConfig();
        this.getWindow().getDecorView().findViewById(android.R.id.content).
                setPadding(0, config.getPixelInsetTop(false), 
                        config.getPixelInsetRight(), config.getPixelInsetBottom());
    }

    //透明狀態列
    @TargetApi(19)
    private static void setTranslucentStatus(Activity activity, boolean on) {
        Window win = activity.getWindow();
        WindowManager.LayoutParams winParams = win.getAttributes();
        final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
        if (on) {
            winParams.flags |= bits;
        } else {
            winParams.flags &= ~bits;
        }
        win.setAttributes(winParams);
    }
}

相關文章