更改目录结构
This commit is contained in:
95
app/src/main/java/com/aiosman/riderpro/exp/StatusBarExp.kt
Normal file
95
app/src/main/java/com/aiosman/riderpro/exp/StatusBarExp.kt
Normal file
@@ -0,0 +1,95 @@
|
||||
package com.aiosman.riderpro.exp
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.res.Resources
|
||||
import android.os.Build
|
||||
import android.util.TypedValue
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowManager
|
||||
import androidx.annotation.ColorInt
|
||||
//import androidx.appcompat.app.AppCompatActivity
|
||||
|
||||
private const val COLOR_TRANSPARENT = 0
|
||||
|
||||
@SuppressLint("ObsoleteSdkInt")
|
||||
@JvmOverloads
|
||||
fun Activity.immersive(@ColorInt color: Int = COLOR_TRANSPARENT, darkMode: Boolean? = null) {
|
||||
when {
|
||||
Build.VERSION.SDK_INT >= 21 -> {
|
||||
when (color) {
|
||||
COLOR_TRANSPARENT -> {
|
||||
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
|
||||
var systemUiVisibility = window.decorView.systemUiVisibility
|
||||
systemUiVisibility = systemUiVisibility or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
||||
systemUiVisibility = systemUiVisibility or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
||||
window.decorView.systemUiVisibility = systemUiVisibility
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
|
||||
window.statusBarColor = color
|
||||
}
|
||||
else -> {
|
||||
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
|
||||
var systemUiVisibility = window.decorView.systemUiVisibility
|
||||
systemUiVisibility = systemUiVisibility and View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
||||
systemUiVisibility = systemUiVisibility and View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
||||
window.decorView.systemUiVisibility = systemUiVisibility
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
|
||||
window.statusBarColor = color
|
||||
}
|
||||
}
|
||||
}
|
||||
Build.VERSION.SDK_INT >= 19 -> {
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
|
||||
if (color != COLOR_TRANSPARENT) {
|
||||
setTranslucentView(window.decorView as ViewGroup, color)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (darkMode != null) {
|
||||
darkMode(darkMode)
|
||||
}
|
||||
}
|
||||
|
||||
@JvmOverloads
|
||||
fun Activity.darkMode(darkMode: Boolean = true) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
var systemUiVisibility = window.decorView.systemUiVisibility
|
||||
systemUiVisibility = if (darkMode) {
|
||||
systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
|
||||
} else {
|
||||
systemUiVisibility and View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv()
|
||||
}
|
||||
window.decorView.systemUiVisibility = systemUiVisibility
|
||||
}
|
||||
}
|
||||
|
||||
private fun Context.setTranslucentView(container: ViewGroup, color: Int) {
|
||||
if (Build.VERSION.SDK_INT >= 19) {
|
||||
var simulateStatusBar: View? = container.findViewById(android.R.id.custom)
|
||||
if (simulateStatusBar == null && color != 0) {
|
||||
simulateStatusBar = View(container.context)
|
||||
simulateStatusBar.id = android.R.id.custom
|
||||
val lp = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight)
|
||||
container.addView(simulateStatusBar, lp)
|
||||
}
|
||||
simulateStatusBar?.setBackgroundColor(color)
|
||||
}
|
||||
}
|
||||
|
||||
val Context?.statusBarHeight: Int
|
||||
get() {
|
||||
this ?: return 0
|
||||
var result = 24
|
||||
val resId = resources.getIdentifier("status_bar_height", "dimen", "android")
|
||||
result = if (resId > 0) {
|
||||
resources.getDimensionPixelSize(resId)
|
||||
} else {
|
||||
TypedValue.applyDimension(
|
||||
TypedValue.COMPLEX_UNIT_DIP,
|
||||
result.toFloat(), Resources.getSystem().displayMetrics
|
||||
).toInt()
|
||||
}
|
||||
return result
|
||||
}
|
||||
Reference in New Issue
Block a user