半透明状态栏使布局越界(显示后面的视图)
Posted
技术标签:
【中文标题】半透明状态栏使布局越界(显示后面的视图)【英文标题】:Translucent Status bar makes the layout out of bounds(showing view behind) 【发布时间】:2018-08-22 09:07:27 【问题描述】:我想实现一个半透明的状态栏,我找到了这个,
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
是的,当我的折叠工具栏/应用栏展开时,它使我的状态栏变成半透明
但问题是其中一个视图(imageView)落后于其他视图之一(似乎它的父布局超出了范围,请参阅附加图片)
opaque status bar, please see the image at the bottom
在此之前,我完全没有这样的问题
non-translucent status bar
这是我的xml,我尽量删除,请多包涵,
<?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"
android:layout_
android:layout_
android:background="@android:color/background_light">
<android.support.design.widget.AppBarLayout
android:id="@+id/mHomeAppBar"
android:layout_
android:layout_
android:background="@color/colorPrimaryDark"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/main.collapsing"
android:layout_
android:layout_
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|snap|exitUntilCollapsed"
app:title="">
<android.support.constraint.ConstraintLayout
android:layout_
android:layout_
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:paddingTop="15dp"
app:layout_collapseMode="parallax"
app:layout_scrollFlags="scroll|enterAlwaysCollapsed">
<ImageView
android:id="@+id/image_view_on_bottom"
android:layout_
android:layout_
android:layout_marginBottom="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:srcCompat="@drawable/ic_near_me_white_18dp"/>
</android.support.constraint.ConstraintLayout>
<android.support.v7.widget.Toolbar
android:id="@+id/mHomeToolbar"
android:layout_
android:layout_
app:layout_collapseMode="pin"
app:navigationIcon="?attr/homeAsUpIndicator"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
android:id="@+id/mHomeScrollView"
android:fitsSystemWindows="true"
android:layout_
android:layout_
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.constraint.ConstraintLayout
android:layout_
android:layout_>
<LinearLayout
android:id="@+id/mLayoutTabComponents"
android:layout_
android:layout_
android:orientation="vertical"
android:visibility="visible">
<android.support.design.widget.TabLayout
android:id="@+id/mHomeTabLayout"
android:layout_
android:layout_
app:tabGravity="fill"
app:tabMode="fixed" />
<android.support.v4.view.ViewPager
android:id="@+id/mHomeViewPager"
android:layout_
android:layout_
android:layout_weight="1"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</LinearLayout>
</android.support.constraint.ConstraintLayout>
</android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>
这就是风格
<style name = "AppThemeNoActionBar" parent =
"Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimaryDark</item>
<item name="android:subtitle">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:background">@null</item>
<!-- Support library compatibility -->
<item name="background">@null</item>
</style>
我正在尝试一切,我尝试将 app:layout_behavior="@string/appbar_scrolling_view_behavior" 放在每个父容器和布局中,我尝试将 TabLayout 的 tabGravity 从填充中删除,但仍然没有运气:(,可以任何人都帮我找出问题所在,我知道我在样式上遗漏了一些东西,但请让我朝着正确的方向前进,再次,如果 xml 代码有点长,我深表歉意,提前谢谢!
更新:我删除了布局 xml 上所有不必要的视图内容。任何人? :(
【问题讨论】:
【参考方案1】:我设法通过设置解决了我的问题
fitSystemWindows
假的
这导致状态栏删除了它生成的填充,然后我在下一个布局上添加了一个 25dp 的顶部填充,这是包含所有子视图的 AppBarLayout,现在它可以完美地按照我的意愿工作。
感谢这些帖子,如果大家遇到相同或相关的半透明状态栏问题,请看这里
Translucent/Transparent status bar + CoordinatorLayout + Toolbar + Fragment
Using windowTranslucentStatus with CollapsingToolbarLayout
【讨论】:
以上是关于半透明状态栏使布局越界(显示后面的视图)的主要内容,如果未能解决你的问题,请参考以下文章
android将工具栏扩展到半透明状态栏,同时将其他布局对象保留在系统视图中
半透明/透明状态栏 + CoordinatorLayout + Toolbar + Fragment
获取正确大小的 android 状态栏并将其应用于 HTML?