沉浸式

This commit is contained in:
2026-05-07 08:35:11 +08:00
parent 3558f053e6
commit fd5a5a30d2
18 changed files with 114 additions and 40 deletions

View File

@@ -36,7 +36,6 @@ android {
buildFeatures { buildFeatures {
viewBinding=true viewBinding=true
} }
} }
dependencies { dependencies {
@@ -83,4 +82,8 @@ dependencies {
implementation("androidx.media3:media3-ui:1.9.0") implementation("androidx.media3:media3-ui:1.9.0")
// ExoPlayer 通用库 // ExoPlayer 通用库
implementation("androidx.media3:media3-common:1.9.0") implementation("androidx.media3:media3-common:1.9.0")
// 基础依赖包,必须要依赖
implementation("com.geyifeng.immersionbar:immersionbar:3.2.2")
// kotlin扩展可选
implementation("com.geyifeng.immersionbar:immersionbar-ktx:3.2.2")
} }

View File

@@ -9,6 +9,7 @@ import androidx.recyclerview.widget.GridLayoutManager
import com.example.defenseapplication.adapter.AddDeviceAdapter import com.example.defenseapplication.adapter.AddDeviceAdapter
import com.example.defenseapplication.adapter.Device import com.example.defenseapplication.adapter.Device
import com.example.defenseapplication.databinding.AddDeviceActivityBinding import com.example.defenseapplication.databinding.AddDeviceActivityBinding
import com.gyf.immersionbar.ImmersionBar
class AddDeviceActivity : AppCompatActivity() { class AddDeviceActivity : AppCompatActivity() {
@@ -18,7 +19,10 @@ class AddDeviceActivity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = AddDeviceActivityBinding.inflate(layoutInflater) binding = AddDeviceActivityBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topBar)
.init()
binding.ivBack.setOnClickListener { binding.ivBack.setOnClickListener {
finish() finish()
} }

View File

@@ -22,6 +22,7 @@ import com.example.defenseapplication.R
import com.example.defenseapplication.adapter.WifiListAdapter import com.example.defenseapplication.adapter.WifiListAdapter
import com.example.defenseapplication.databinding.AddFamilyActivityBinding import com.example.defenseapplication.databinding.AddFamilyActivityBinding
import com.example.defenseapplication.databinding.DialogWifiListBinding import com.example.defenseapplication.databinding.DialogWifiListBinding
import com.gyf.immersionbar.ImmersionBar
class AddFamilyActivity : AppCompatActivity() { class AddFamilyActivity : AppCompatActivity() {
@@ -34,7 +35,10 @@ class AddFamilyActivity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = AddFamilyActivityBinding.inflate(layoutInflater) binding = AddFamilyActivityBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topBar)
.init()
binding.ivBack.setOnClickListener { binding.ivBack.setOnClickListener {
finish() finish()
} }

View File

@@ -9,6 +9,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.example.defenseapplication.adapter.MessageListAdapter import com.example.defenseapplication.adapter.MessageListAdapter
import com.example.defenseapplication.adapter.MessageListItem import com.example.defenseapplication.adapter.MessageListItem
import com.example.defenseapplication.databinding.MessageActivityBinding import com.example.defenseapplication.databinding.MessageActivityBinding
import com.gyf.immersionbar.ImmersionBar
class MessageActivity : AppCompatActivity() { class MessageActivity : AppCompatActivity() {
private lateinit var binding: MessageActivityBinding private lateinit var binding: MessageActivityBinding
@@ -19,7 +20,10 @@ class MessageActivity : AppCompatActivity() {
enableEdgeToEdge() enableEdgeToEdge()
binding = MessageActivityBinding.inflate(layoutInflater) binding = MessageActivityBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topBar)
.init()
ViewCompat.setOnApplyWindowInsetsListener(binding.main) { v, insets -> ViewCompat.setOnApplyWindowInsetsListener(binding.main) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)

View File

@@ -10,6 +10,7 @@ import com.bumptech.glide.Glide
import com.example.defenseapplication.R import com.example.defenseapplication.R
import com.example.defenseapplication.databinding.PersonalFragmentBinding import com.example.defenseapplication.databinding.PersonalFragmentBinding
import com.example.defenseapplication.personal.PersonalProfileActivity import com.example.defenseapplication.personal.PersonalProfileActivity
import com.gyf.immersionbar.ImmersionBar
class PersonalFragment : Fragment() { class PersonalFragment : Fragment() {
// ViewBinding // ViewBinding
@@ -21,6 +22,12 @@ class PersonalFragment : Fragment() {
container: ViewGroup?, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View { ): View {
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.headerLayout)
.init()
_binding = PersonalFragmentBinding.inflate(inflater, container, false) _binding = PersonalFragmentBinding.inflate(inflater, container, false)
Glide.with(this) Glide.with(this)
.load(R.drawable.img) .load(R.drawable.img)

View File

@@ -26,6 +26,7 @@ import com.example.defenseapplication.R
import com.example.defenseapplication.databinding.ScanActivityBinding import com.example.defenseapplication.databinding.ScanActivityBinding
import com.google.zxing.* import com.google.zxing.*
import com.google.zxing.common.HybridBinarizer import com.google.zxing.common.HybridBinarizer
import com.gyf.immersionbar.ImmersionBar
import java.util.* import java.util.*
class ScanActivity : AppCompatActivity(), SurfaceHolder.Callback { class ScanActivity : AppCompatActivity(), SurfaceHolder.Callback {
@@ -42,7 +43,10 @@ class ScanActivity : AppCompatActivity(), SurfaceHolder.Callback {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = ScanActivityBinding.inflate(layoutInflater) binding = ScanActivityBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.btnBack)
.init()
initView() initView()
initListener() initListener()
startScanLineAnimation() startScanLineAnimation()

View File

@@ -3,6 +3,7 @@ package com.example.defenseapplication.home
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import com.example.defenseapplication.databinding.SetNameActivityBinding import com.example.defenseapplication.databinding.SetNameActivityBinding
import com.gyf.immersionbar.ImmersionBar
class SetNameActivity : AppCompatActivity() { class SetNameActivity : AppCompatActivity() {
@@ -12,7 +13,10 @@ class SetNameActivity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = SetNameActivityBinding.inflate(layoutInflater) binding = SetNameActivityBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topBar)
.init()
binding.ivBack.setOnClickListener { binding.ivBack.setOnClickListener {
finish() finish()
} }

View File

@@ -13,7 +13,10 @@ import android.widget.Toast
import androidx.activity.OnBackPressedDispatcher import androidx.activity.OnBackPressedDispatcher
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.compose.ui.test.isEnabled import androidx.compose.ui.test.isEnabled
import com.example.defenseapplication.R
import com.example.defenseapplication.databinding.LiveVideoActivityBinding import com.example.defenseapplication.databinding.LiveVideoActivityBinding
import com.gyf.immersionbar.ImmersionBar
import com.gyf.immersionbar.ktx.destroyImmersionBar
import java.io.IOException import java.io.IOException
class LiveVideoActivity : AppCompatActivity(), SurfaceHolder.Callback { class LiveVideoActivity : AppCompatActivity(), SurfaceHolder.Callback {
@@ -36,6 +39,11 @@ class LiveVideoActivity : AppCompatActivity(), SurfaceHolder.Callback {
binding = LiveVideoActivityBinding.inflate(layoutInflater) binding = LiveVideoActivityBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
// ImmersionBar核心调用,沉浸式
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topBar)
.init()
initSurfaceView() initSurfaceView()
initListener() initListener()
@@ -297,5 +305,7 @@ class LiveVideoActivity : AppCompatActivity(), SurfaceHolder.Callback {
releaseMediaPlayer() releaseMediaPlayer()
super.onDestroy() super.onDestroy()
} }
} }

View File

@@ -9,6 +9,7 @@ import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import com.example.defenseapplication.R import com.example.defenseapplication.R
import com.example.defenseapplication.databinding.FaceLoginActivityBinding import com.example.defenseapplication.databinding.FaceLoginActivityBinding
import com.gyf.immersionbar.ImmersionBar
class FaceLoginActivity : AppCompatActivity() { class FaceLoginActivity : AppCompatActivity() {
@@ -17,7 +18,10 @@ class FaceLoginActivity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = FaceLoginActivityBinding.inflate(layoutInflater) binding = FaceLoginActivityBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topContainer)
.init()
setupListeners() setupListeners()
} }

View File

@@ -15,6 +15,7 @@ import com.example.defenseapplication.databinding.FaceVerificationActivityBindin
import com.example.defenseapplication.view.FaceAnalyzer import com.example.defenseapplication.view.FaceAnalyzer
import com.google.mlkit.vision.face.FaceDetection import com.google.mlkit.vision.face.FaceDetection
import com.google.mlkit.vision.face.FaceDetectorOptions import com.google.mlkit.vision.face.FaceDetectorOptions
import com.gyf.immersionbar.ImmersionBar
import java.util.concurrent.ExecutorService import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors import java.util.concurrent.Executors
@@ -33,7 +34,10 @@ class FaceVerificationActivity : AppCompatActivity() {
// 使用标准 ViewBinding // 使用标准 ViewBinding
binding = FaceVerificationActivityBinding.inflate(layoutInflater) binding = FaceVerificationActivityBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topContainer)
.init()
// 初始化人脸检测器(选项可自行调整) // 初始化人脸检测器(选项可自行调整)
val options = FaceDetectorOptions.Builder() val options = FaceDetectorOptions.Builder()
.setPerformanceMode(FaceDetectorOptions.PERFORMANCE_MODE_FAST) .setPerformanceMode(FaceDetectorOptions.PERFORMANCE_MODE_FAST)

View File

@@ -14,6 +14,7 @@ import androidx.core.view.WindowInsetsCompat
import com.example.defenseapplication.R import com.example.defenseapplication.R
import com.example.defenseapplication.databinding.ForgetPasswordActivityBinding import com.example.defenseapplication.databinding.ForgetPasswordActivityBinding
import com.google.firebase.crashlytics.buildtools.reloc.org.apache.http.util.TextUtils import com.google.firebase.crashlytics.buildtools.reloc.org.apache.http.util.TextUtils
import com.gyf.immersionbar.ImmersionBar
import java.util.regex.Pattern import java.util.regex.Pattern
import kotlin.random.Random import kotlin.random.Random
@@ -34,6 +35,10 @@ class ForgetPasswordActivity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = ForgetPasswordActivityBinding.inflate(layoutInflater) binding = ForgetPasswordActivityBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topContainer)
.init()
// 设置渐变背景 // 设置渐变背景
val startColor = Color.parseColor("#CBEBFA") val startColor = Color.parseColor("#CBEBFA")
val endColor = Color.parseColor("#FFF2EF") val endColor = Color.parseColor("#FFF2EF")

View File

@@ -11,6 +11,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.constraintlayout.widget.ConstraintSet import androidx.constraintlayout.widget.ConstraintSet
import com.example.defenseapplication.databinding.ActivityLoginBinding import com.example.defenseapplication.databinding.ActivityLoginBinding
import com.gyf.immersionbar.ImmersionBar
class LoginActivity : AppCompatActivity() { class LoginActivity : AppCompatActivity() {
@@ -29,6 +30,11 @@ class LoginActivity : AppCompatActivity() {
val endColor = Color.parseColor("#FFF2EF") val endColor = Color.parseColor("#FFF2EF")
setGradientBackground(binding.main, startColor, endColor) setGradientBackground(binding.main, startColor, endColor)
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.logoFrame)
.init()
setupTabListeners() setupTabListeners()
setupClickListeners() setupClickListeners()
switchToSmsMode() switchToSmsMode()

View File

@@ -7,6 +7,7 @@ import android.os.Bundle
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import com.example.defenseapplication.databinding.RegisterActivityBinding import com.example.defenseapplication.databinding.RegisterActivityBinding
import com.gyf.immersionbar.ImmersionBar
/** /**
* 注册页面 * 注册页面
@@ -25,6 +26,12 @@ class RegisterActivity : AppCompatActivity() {
val startColor = Color.parseColor("#CBEBFA") val startColor = Color.parseColor("#CBEBFA")
val endColor = Color.parseColor("#FFF2EF") val endColor = Color.parseColor("#FFF2EF")
setGradientBackground(binding.main, startColor, endColor) setGradientBackground(binding.main, startColor, endColor)
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topContainer)
.init()
setupListeners() setupListeners()
//setupTextWatchers() //setupTextWatchers()
} }

View File

@@ -10,6 +10,7 @@ import androidx.core.view.WindowInsetsCompat
import com.example.defenseapplication.R import com.example.defenseapplication.R
import com.example.defenseapplication.databinding.RegisterSuccessActivityBinding import com.example.defenseapplication.databinding.RegisterSuccessActivityBinding
import com.example.defenseapplication.home.HomeActivity import com.example.defenseapplication.home.HomeActivity
import com.gyf.immersionbar.ImmersionBar
class RegisterSuccessActivity : AppCompatActivity() { class RegisterSuccessActivity : AppCompatActivity() {
@@ -19,6 +20,10 @@ class RegisterSuccessActivity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = RegisterSuccessActivityBinding.inflate(layoutInflater) binding = RegisterSuccessActivityBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topContainer)
.init()
// 返回按钮 // 返回按钮
binding.backIcon.setOnClickListener { binding.backIcon.setOnClickListener {
finish() finish()

View File

@@ -8,6 +8,7 @@ import androidx.core.view.WindowInsetsCompat
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.example.defenseapplication.R import com.example.defenseapplication.R
import com.example.defenseapplication.databinding.PersonalProfileActivityBinding import com.example.defenseapplication.databinding.PersonalProfileActivityBinding
import com.gyf.immersionbar.ImmersionBar
class PersonalProfileActivity : AppCompatActivity() { class PersonalProfileActivity : AppCompatActivity() {
private lateinit var binding: PersonalProfileActivityBinding private lateinit var binding: PersonalProfileActivityBinding
@@ -17,7 +18,10 @@ class PersonalProfileActivity : AppCompatActivity() {
enableEdgeToEdge() enableEdgeToEdge()
binding = PersonalProfileActivityBinding.inflate(layoutInflater) binding = PersonalProfileActivityBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topBar)
.init()
ViewCompat.setOnApplyWindowInsetsListener(binding.main) { v, insets -> ViewCompat.setOnApplyWindowInsetsListener(binding.main) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)

View File

@@ -20,6 +20,7 @@
android:paddingBottom="12dp"> android:paddingBottom="12dp">
<LinearLayout <LinearLayout
android:id="@+id/main"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_vertical" android:gravity="center_vertical"

View File

@@ -30,7 +30,6 @@
android:layout_weight="1" android:layout_weight="1"
android:gravity="center" android:gravity="center"
android:text="智能防御机A1" android:text="智能防御机A1"
android:textColor="@color/black"
android:textSize="16sp" android:textSize="16sp"
android:textStyle="bold" /> android:textStyle="bold" />

View File

@@ -1,50 +1,49 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main" android:id="@+id/main"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/message_bg" android:background="@color/message_bg"
android:orientation="vertical"
tools:context=".home.MessageActivity"> tools:context=".home.MessageActivity">
<LinearLayout
android:id="@+id/topBar"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView <ImageView
android:id="@+id/ivBack" android:id="@+id/ivBack"
android:layout_width="24dp" android:layout_width="24dp"
android:layout_height="24dp" android:layout_height="24dp"
android:layout_marginStart="16dp" android:src="@mipmap/back"/>
android:layout_marginTop="10dp"
android:contentDescription="@null"
android:src="@mipmap/back"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:gravity="center"
android:id="@+id/tvTitle" android:id="@+id/tvTitle"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="10dp" android:layout_weight="1"
android:text="消息列表" android:text="消息列表"
android:textColor="#333333" android:textColor="@color/black"
android:textSize="24sp" android:textSize="16dp"
android:textStyle="bold" android:textStyle="bold"/>
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" </LinearLayout>
app:layout_constraintTop_toTopOf="parent" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvMessageList" android:id="@+id/rvMessageList"
android:layout_width="0dp" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="wrap_content"
android:clipToPadding="false" android:clipToPadding="false"
android:paddingStart="16dp" android:paddingStart="16dp"
android:paddingTop="12dp" android:paddingTop="12dp"
android:paddingEnd="16dp" android:paddingEnd="16dp"
android:paddingBottom="16dp" android:paddingBottom="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvTitle"
tools:listitem="@layout/item_message_notice" /> tools:listitem="@layout/item_message_notice" />
</androidx.constraintlayout.widget.ConstraintLayout> </LinearLayout>