- 新增 BaseActivity:继承 ComponentActivity,隐藏状态栏和导航栏,底部上滑可临时唤出导航栏 - 新增 HomeActivity(XML 版本)及对应布局 activity_home.xml,作为应用启动入口 - GoodsListActivity、FoodCollectionActivity、LocalImagePreviewActivity、PurchaseOrderActivity 统一改为继承 BaseActivity - 更新 AndroidManifest.xml:HomeActivity 注册为启动入口 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
52 lines
1.9 KiB
Kotlin
52 lines
1.9 KiB
Kotlin
package com.sw.inbound.base
|
||
|
||
import android.os.Bundle
|
||
import androidx.activity.ComponentActivity
|
||
import androidx.core.view.WindowCompat
|
||
import androidx.core.view.WindowInsetsCompat
|
||
import androidx.core.view.WindowInsetsControllerCompat
|
||
|
||
/**
|
||
* 所有 Activity 的基类
|
||
* - 继承 ComponentActivity,保持与项目其他 Activity 一致
|
||
* - 自动隐藏状态栏和导航栏,实现全屏沉浸式体验
|
||
* - 在屏幕底部上滑时可临时唤出导航栏,松手后自动收回
|
||
*/
|
||
abstract class BaseActivity : ComponentActivity() {
|
||
|
||
override fun onCreate(savedInstanceState: Bundle?) {
|
||
super.onCreate(savedInstanceState)
|
||
hideSystemBars()
|
||
}
|
||
|
||
/**
|
||
* 窗口焦点变化时回调
|
||
* 场景:弹出 Dialog 后焦点丢失,Dialog 消失后焦点恢复,此时需重新隐藏系统栏,
|
||
* 避免系统栏在 Dialog 关闭后意外"复活"
|
||
*/
|
||
override fun onWindowFocusChanged(hasFocus: Boolean) {
|
||
super.onWindowFocusChanged(hasFocus)
|
||
if (hasFocus) {
|
||
hideSystemBars()
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 隐藏状态栏和导航栏
|
||
* 使用 WindowInsetsControllerCompat(Androidx 推荐方式,向下兼容性好)
|
||
* - 状态栏:完全隐藏
|
||
* - 导航栏:完全隐藏,底部上滑时临时出现,松手后自动收回(BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE)
|
||
*/
|
||
private fun hideSystemBars() {
|
||
// 允许布局延伸到系统栏区域(edge-to-edge),避免内容被系统栏遮挡
|
||
WindowCompat.setDecorFitsSystemWindows(window, false)
|
||
WindowInsetsControllerCompat(window, window.decorView).apply {
|
||
// 同时隐藏状态栏和导航栏
|
||
hide(WindowInsetsCompat.Type.systemBars())
|
||
// 底部上滑时临时显示导航栏,松手后自动隐藏(沉浸式 Sticky 模式)
|
||
systemBarsBehavior =
|
||
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
|
||
}
|
||
}
|
||
}
|