android 简单实现沉浸式通知栏(透明通知栏)

本文介绍了如何在Android应用中实现沉浸式通知栏,包括让通知栏透明并调整布局以避免被遮挡,以及实现通知栏和标题栏背景颜色随ScrollView滚动位置的渐变效果。关键点包括设置android:fitsSystemWindows="false",添加FLAG_TRANSLUCENT_STATUS标志,以及使用自定义View控制状态栏颜色。
摘要由CSDN通过智能技术生成

 

一.今天来给大家分享下一种取巧的方式浸式通知栏,先实现布局图片从通知栏底部开始展示,如图:

1.首先在当前的activity的布局中最外层LinearLayout或RelativeLayout中设置android:fitsSystemWindows="false",

fitsSystemWindows设为false表示布局从通知栏底部开始画;如果为true,表示从通知栏下面开始画;

2.通过上面的方法后呢,但是通知栏不是透明的,通知栏会遮挡住上面的图片,此时要实现一个方法让通知栏保持透明,

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    //使通知栏透明
    this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}

3.现在通知栏不会遮挡住图片了,但是此时又有个问题了,返回箭头有一半是在通知栏的下面,一般正常手机的通知栏高度是20dp,也可以用另一种通过代码获得通知栏高度,

fun getStateBarHeight(context: Context): Int {
    var result = 0
    val resourceId = context.resources.getIdentifier("status_bar_height", "dimen", "android")
    if (resourceId > 0) {
        result = context.resources.getDimensionPixelSize(resourceId)
    }
    return result
}

现在可以在activity初始化返回箭头后,给返回箭头加上一个marginTop,

home_back_linear = findViewById<LinearLayout>(R.id.home_back_linear)
var backParams = home_back_linear?.layoutParams
var params1 = FrameLayout.LayoutParams(backParams)
params1.topMargin = titleHeight
home_back_linear?.layoutParams = params1

这样箭头放在通知栏之下正常位置了。

二.现在来通知栏和标题栏的背景颜色值根据scrollview滚动的位置实现颜色渐变,如图:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="false"
    android:orientation="vertical">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <com.ctrip.ibu.ddt.view.PullToZoomScrollView
            android:id="@+id/scroll_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="gone">

        </com.ctrip.ibu.ddt.view.PullToZoomScrollView>

        <LinearLayout
            android:id="@+id/head_linear"
            android:layout_width="match_parent"
            android:layout_height="@dimen/key_height"
            android:background="@co
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值