失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Android Fragment 实现状态栏透明(沉浸式)

Android Fragment 实现状态栏透明(沉浸式)

时间:2019-10-18 22:13:19

相关推荐

Android Fragment 实现状态栏透明(沉浸式)

来两张效果图对比一下

第一张图是实现了透明状态栏的效果,第二张图是未实现透明状状态栏。如果还看不出区别,那么请打开手机淘宝和任一手机银行App对比顶部的颜色。

现在好多手机已经是全面屏了,如果我们的应用在顶部还是多出来这么一块黑条,那多不美观啊(APP 主题色是黑色的略过)

那么如何实现?我这里由于项目集成了statusbarutil所以直接就参考了他例子中的代码来实现了。

StatusBarUtil 地址

StatusBarUtil 在 Fragment 使用

实现

导包

compile 'com.jaeger.statusbarutil:library:1.4.0'设置NoActionBar的主题( 我这里实现了右滑返回,所以设置背景为透明)

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. --><item name="android:textAllCaps">false</item><item name="android:windowActionBar">false</item><item name="windowActionBar">false</item><item name="android:windowAnimationStyle">@style/AnimationActivity</item><item name="windowNoTitle">true</item><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item><item name="android:windowIsTranslucent">true</item><item name="android:windowBackground">@android:color/transparent</item></style>

区别不同版本对待

新建一个res/values-v19目录,在目录下创建一个dimens.xml

<?xml version="1.0" encoding="utf-8"?><resources><!-- Default screen margins, per the Android Design guidelines. --><dimen name="statusbar_view_height">25dp</dimen></resources>

在原先的res/values目录下的dimens.xml也添加statusbar_view_height

<dimen name="statusbar_view_height">0dp</dimen>

给头部带去一些色彩

我这里是首页实现 透明状态栏,而首页是由一个 Activity + 4 个 Fragment 组成的。这里我们只需要将Activity状态栏透明即可,在Fragment中可动态设置是否需要透明状态栏。

比如我的首页,顶部是显示图片,我想它顶部状态栏要透明,可以这么做。

第一步:在布局文件的顶部加上<LinearLayout></LinearLayout>中的控件

<android.support.design.widget.AppBarLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><android.support.design.widget.CollapsingToolbarLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"app:contentScrim="@color/colorPrimary"app:layout_scrollFlags="scroll|exitUntilCollapsed"><com.youth.banner.Bannerandroid:id="@+id/banner"android:layout_width="match_parent"android:layout_height="200dp"app:layout_scrollFlags="scroll|snap"app:layout_collapseMode="parallax" /><android.support.v7.widget.Toolbarandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"app:layout_collapseMode="pin"app:contentInsetStart="0dp"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><Viewandroid:id="@+id/fake_status_bar"android:layout_width="match_parent"android:layout_height="@dimen/statusbar_view_height"android:background="@color/colorPrimary"/><TextViewandroid:id="@+id/search_layout"android:layout_width="match_parent"android:layout_height="wrap_content"android:minHeight="40dp"android:gravity="center"android:hint="@string/search_hint_txt"android:paddingStart="10dp"android:paddingEnd="10dp"android:background="@drawable/home_search_bg_shape"/></LinearLayout></android.support.v7.widget.Toolbar></android.support.design.widget.CollapsingToolbarLayout></android.support.design.widget.AppBarLayout>

idfake_status_barView控件是为了适配顶部的状态栏

idsearch_layoutView控件是顶部的搜索框

第二步:在 fragment 中再设置状态栏的颜色为透明

// 透明顶部setTvTitleBackgroundColor(Color.TRANSPARENT);public void setTvTitleBackgroundColor(@ColorInt int color) {fakeStatusBar.setBackgroundColor(color);}

再比如我的其他页面顶部只想显示 App 的主题色,可以这么做。

直接在布局文件中设置idfake_status_bar控件的背景色为主题色即可。

<LinearLayoutandroid:id="@+id/layout_toolbar"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><Viewandroid:id="@+id/fake_status_bar"android:layout_width="match_parent"android:layout_height="@dimen/statusbar_view_height"android:background="@color/colorPrimary"/><TextViewandroid:id="@+id/tv_project_toolbar"android:layout_width="match_parent"android:layout_height="?actionBarSize"android:text="我是 Toolbar "android:textColor="@color/white"android:textSize="18sp"android:gravity="center"android:background="@color/colorPrimary"/></LinearLayout>

喜欢文章的话点下文章底部小心心

本文完,欢迎你留言讨论。

如果觉得《Android Fragment 实现状态栏透明(沉浸式)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。