如何解决 Material Design 中 CoordinatorLayout 布局导致状态栏透明
在 Material Design 中,CoordinatorLayout 布局是常用的一种布局方式,但是使用 CoordinatorLayout 布局往往会导致状态栏透明,影响应用的视觉效果。本文将介绍如何解决这个问题。
问题分析
在 Android 系统中,状态栏是通过 Window 的 Flag 来控制的。FLAG_TRANSLUCENT_STATUS 和 FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS 是控制状态栏透明和不透明的关键 Flag。使用 FLAG_TRANSLUCENT_STATUS 来设置一个半透明的状态栏,如果这个 View 是不可透明的,那么它会被绘制在 StatusBar 上面,导致状态栏透明。
在 CoordinatorLayout 布局中,通常会设置一个 AppBarLayout,然后在 AppBarLayout 中添加一个 Toolbar。当添加了 Toolbar 后,由于 Toolbar 默认背景色是半透明的,CoordinatorLayout 会自动将 FLAG_TRANSLUCENT_STATUS 设置为 true,从而导致状态栏透明。
解决方案
解决这个问题的方法很简单。我们只需要在代码中将 Toolbar 的背景色设置为不透明的颜色即可,例如:
<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="@color/colorPrimary" />
这样 CoordinatorLayout 会将 FLAG_TRANSLUCENT_STATUS 设置为 false,状态栏就会变成不透明的了。
代码示例
在实际开发中,我们可以将这个方法封装到一个工具类中,方便调用。下面是一个简单的示例代码:
-- -------------------- ---- ------- ------ ----- ------------- - ------ ------ ---- -------------------------- --------- --- ------ - ------ ------ - --------------------- ---------------------------------------------------------------------- ------------------------------------------------------------------------------ -------------------------------- - -
使用时只需要调用 setStatusBarColor 方法即可,例如:
-- -------------------- ---- ------- ------ ----- ------------ ------- ----------------- - --------- --------- ---- --------------- ------------------- - ----------------------------------- --------------------------------------- -- ------- ------------------------------------- ----------------------------------------------- - -
总结
通过将 Toolbar 的背景色设置为不透明的颜色,我们可以解决 CoordinatorLayout 布局导致状态栏透明的问题。这个方法非常简单,但却非常有用。希望本文能够对大家有所帮助,同时也希望读者在实际开发中不断积累经验,不断探索更好的解决方案。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64bf85879e06631ab9bf3296