我正在尝试在我的应用上实现无缝透明状态栏,到目前为止这是我所取得的成就:
如您所见,a)状态栏实际上并不完全透明,b)工具栏已被切断。
这是我的xml布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
tools:context=".ui.profile.ProfileActivity"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:id="@+id/profile_appbar"
android:background="@drawable/topbar_gradient"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.Dark">
<android.support.v7.widget.Toolbar
android:fitsSystemWindows="true"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways"
android:background="@drawable/topbar_gradient"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android" />
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content">
(...)
</android.support.v7.widget.CardView>
</LinearLayout>
样式-v21.xml:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="cardViewStyle">@style/CardView</item>
<item name="coordinatorLayoutStyle">@style/Widget.Support.CoordinatorLayout</item>
<item name="chipStyle">@style/ChipStyle</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>
<style name="AppTheme.Dark" parent="Theme.MaterialComponents.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="cardViewStyle">@style/CardView</item>
<item name="coordinatorLayoutStyle">@style/Widget.Support.CoordinatorLayout</item>
<item name="chipStyle">@style/ChipStyle</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>
我已经尝试过fitSystemWindows的所有组合,我真的不明白这是做什么的。
答案 0 :(得分:1)
这是一种hacky方式..但可能会帮助你..
你可以做的是计算StatusBar
的高度,并添加toolbar
的填充顶部和StatusBar
的高度
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
toolbar.setPadding(0,getStatusBarHeight(context),0,0);
}
获得StatusBar
public static int getStatusBarHeight(final Context context) {
final Resources resources = context.getResources();
final int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0)
return resources.getDimensionPixelSize(resourceId);
else
return (int) Math.ceil((VERSION.SDK_INT >= VERSION_CODES.M ? 24 : 25) * resources.getDisplayMetrics().density);
}
编辑:
您需要将ToolBar
的高度设置为wrap_content
。
<android.support.v7.widget.Toolbar
android:fitsSystemWindows="true"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways"
android:background="@drawable/topbar_gradient"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android" />
OUT-PUT:
希望它会对你有所帮助。
快乐编码。
答案 1 :(得分:0)
尝试将此添加到您的Activity onCreate()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window w = getWindow();
w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
答案 2 :(得分:0)
从样式中删除android:fitsSystemWindows="true"
和Toolbar
中的<item name="android:windowDrawsSystemBarBackgrounds">true</item>
。 android:windowDrawsSystemBarBackgrounds
会导致在状态栏下绘制内容。