我知道这个问题已经被问过很多次了,但所有的答案要么不起作用,要么使用了不推荐使用的代码:
我想达到与最新的谷歌地图应用程序相同的效果:
WindowCompat.setDecorFitsSystemWindows(window, false) 部分工作,因为它还隐藏了导航栏
为了让画面StatusBar完全透明,
首先,在主题中将其颜色设置为透明或通过代码设置为:
//In Theme
<item name="android:statusBarColor">@android:color/transparent</item>
//In Code
window.statusBarColor = android.R.color.transparent
Run Code Online (Sandbox Code Playgroud)
然后,要绘制 后面的视图StatusBar,请使用以下代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
window.setDecorFitsSystemWindows(false)
} else {
window.setFlags(
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
)
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用该boolean属性android:windowLightStatusBar,它将文本和图标颜色设置StatusBar为黑色或白色,您也可以通过编程来完成。NavigationBar如果您不想隐藏它,也可以为其设置颜色。
输出:
第 1 步:要使状态栏透明:将以下内容添加到样式中themes.xml或sytles.xml:
<item name="android:windowTranslucentStatus" tools:targetApi="kitkat">true</item>
<item name="android:statusBarColor" tools:targetApi="lollipop">@android:color/transparent</item>
Run Code Online (Sandbox Code Playgroud)
步骤2:然后在活动中使状态栏与活动重叠:
从 API 级别 30 起不推荐使用使用的窗口标志,因此它们可以使用到 API 级别 29:
if (Build.VERSION.SDK_INT in 21..29) {
window.statusBarColor = Color.TRANSPARENT
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
window.decorView.systemUiVisibility =
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or SYSTEM_UI_FLAG_LAYOUT_STABLE
} else if (Build.VERSION.SDK_INT >= 30) {
window.statusBarColor = Color.TRANSPARENT
// Making status bar overlaps with the activity
WindowCompat.setDecorFitsSystemWindows(window, false)
}
Run Code Online (Sandbox Code Playgroud)
这在 API 级别 19 到 API 级别 30 的范围内在 8 个设备/模拟器上进行了测试。
| 归档时间: |
|
| 查看次数: |
533 次 |
| 最近记录: |