Skip to content

Commit

Permalink
fix: status bar system ui
Browse files Browse the repository at this point in the history
  • Loading branch information
lisonge committed Jun 16, 2024
1 parent b6a05c0 commit 24fe493
Showing 1 changed file with 26 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package li.songe.gkd.composition

import android.content.res.Configuration
import android.graphics.Color
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.enableEdgeToEdge
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.blankj.utilcode.util.BarUtils

open class CompositionActivity(
private val block: CompositionActivity.(Bundle?) -> Unit,
Expand All @@ -30,6 +34,7 @@ open class CompositionActivity(
override fun onCreate(savedInstanceState: Bundle?) {
installSplashScreen()
enableEdgeToEdge()
fixTopPadding()
super.onCreate(savedInstanceState)
block(savedInstanceState)
}
Expand All @@ -42,5 +47,25 @@ open class CompositionActivity(
super.onConfigurationChanged(newConfig)
configurationChangedHooks.forEach { f -> f(newConfig) }
}
}

}
fun ComponentActivity.fixTopPadding() {
// 当调用系统分享时, 会导致状态栏区域消失, 应用整体上移, 设置一个 top padding 保证不上移
var tempTop: Int? = null
ViewCompat.setOnApplyWindowInsetsListener(window.decorView) { view, windowInsets ->
view.setBackgroundColor(Color.TRANSPARENT)
val statusBars = windowInsets.getInsets(WindowInsetsCompat.Type.statusBars())
if (statusBars.top == 0) {
view.setPadding(
statusBars.left,
tempTop ?: BarUtils.getStatusBarHeight(),
statusBars.right,
statusBars.bottom
)
} else {
tempTop = statusBars.top
view.setPadding(statusBars.left, 0, statusBars.right, statusBars.bottom)
}
ViewCompat.onApplyWindowInsets(view, windowInsets)
}
}

0 comments on commit 24fe493

Please sign in to comment.