Android 状态栏总结
全屏+状态栏无文字图标
方式一:设置主题
<style name="FullScreenTheme" parent="AppTheme">
<item name="android:windowFullscreen">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentNavigation">true</item>
</style>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_status_bar1)
StatusBarUtils.fitsNotchScreen(this)
}
方式二:代码设置
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_status_bar1)
//隐藏状态栏
// StatusBarUtils.hideBar(this, BarState.FLAG_HIDE_STATUS_BAR)
//隐藏状态栏和底部导航栏
StatusBarUtils.hideBar(this, BarState.FLAG_HIDE_ALL_BAR)
//隐藏底部导航栏
// StatusBarUtils.hideBar(this, BarState.FLAG_HIDE_NAVIGATION_BAR)
//显示全部
// StatusBarUtils.hideBar(this,BarState.FLAG_SHOW_ALL_BAR)
}
/**
* 状态栏工具类
*/
object StatusBarUtils {
//刘海屏适配
fun fitsNotchScreen(activity: Activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
try {
val lp: WindowManager.LayoutParams = activity.window.getAttributes()
lp.layoutInDisplayCutoutMode =
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
activity.window.attributes = lp
} catch (e: Exception) {
}
}
}
/**
* 操作状态栏
*/
fun hideBar(activity: Activity, item: BarState) {
fitsNotchScreen(activity)
var uiFlags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
when (item) {
BarState.FLAG_HIDE_ALL_BAR ->
//隐藏状态栏和导航栏
uiFlags =
uiFlags or (View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.INVISIBLE)
BarState.FLAG_HIDE_STATUS_BAR ->
//隐藏状态栏
uiFlags = uiFlags or (View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.INVISIBLE)
BarState.FLAG_HIDE_NAVIGATION_BAR ->
//隐藏导航栏
uiFlags =
uiFlags or (View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)
BarState.FLAG_SHOW_ALL_BAR ->
//显示状态栏和导航栏
uiFlags = uiFlags or View.SYSTEM_UI_FLAG_VISIBLE
}
uiFlags = uiFlags or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
activity.window.decorView.systemUiVisibility = uiFlags
}
}
enum class BarState {
/**
* 隐藏状态栏
*/
FLAG_HIDE_STATUS_BAR,
/**
* 隐藏导航栏
*/
FLAG_HIDE_NAVIGATION_BAR,
/**
* 隐藏状态栏和导航栏
*/
FLAG_HIDE_ALL_BAR,
/**
* 显示状态栏和导航栏
*/
FLAG_SHOW_ALL_BAR
}
全屏+状态栏有文字图标
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_status_bar2)
// window.statusBarColor= Color.TRANSPARENT //可以替换为主题
window.decorView.systemUiVisibility =
View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
}
<!-- 透明状态栏主题 -->
<style name="AppTheme.Transparent" parent="AppTheme">
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
修改状态栏颜色
工具类
object StatusBarUtils {
/**
* 修改状态栏颜色
*/
fun setStatusBarColor(activity: Activity, @ColorInt color: Int) {
activity.window.statusBarColor = color
}
/**
* 修改状态栏颜色,通过资源文件
*/
fun setStatusBarColor2(activity: Activity, @ColorRes colorId: Int) {
activity.window.statusBarColor = activity.resources.getColor(colorId)
}
}
使用
fun switchRed(v: View) {
StatusBarUtils.setStatusBarColor(this, Color.RED)
}
fun switchYellow(v: View) {
StatusBarUtils.setStatusBarColor2(this, R.color.yellow)
}
fun switchGreen(v: View) {
StatusBarUtils.setStatusBarColor2(this, R.color.green)
}
沉浸式导航栏效果
代码下载
版权声明:本文为qq_14876133原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。