设置页面(1)

This commit is contained in:
2026-05-09 15:21:25 +08:00
parent d1a72da001
commit 9440687b30
27 changed files with 1407 additions and 7 deletions

View File

@@ -0,0 +1,74 @@
package com.example.defenseapplication.liveVideo
import TimePickerFragment
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.example.defenseapplication.databinding.AutoModeActivityBinding
import com.example.defenseapplication.view.AutoModeNoticeDialog
import com.gyf.immersionbar.ImmersionBar
import java.util.Calendar
class AutoModeActivity : AppCompatActivity() {
private lateinit var binding: AutoModeActivityBinding
private lateinit var calendar: Calendar
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = AutoModeActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topBar)
.init()
initListener()
showAutoModeNoticeDialog()
}
private fun initListener() {
binding.ivBack.setOnClickListener {
finish()
}
binding.rbAutoMode.setOnClickListener {
binding.rbSemiAutoMode.isChecked = false
showAutoModeNoticeDialog()
}
binding.rbSemiAutoMode.setOnClickListener {
binding.rbAutoMode.isChecked = false
}
// 起始时间选择
binding.itemStartTime.setOnClickListener {
showTimePicker { hour, minute ->
val startTimeStr = String.format("%02d:%02d", hour, minute)
binding.tvStartTime.text = startTimeStr
}
}
// 结束时间选择
binding.itemEndTime.setOnClickListener {
showTimePicker { hour, minute ->
val endTimeStr = String.format("%02d:%02d", hour, minute)
binding.tvEndTime.text = endTimeStr
}
}
}
/**
* 显示时间选择器对话框
* @param onTimeSelected 时间选择回调,参数为小时和分钟
*/
private fun showTimePicker(onTimeSelected: (hour: Int, minute: Int) -> Unit) {
val timePickerFragment = TimePickerFragment { hour, minute ->
onTimeSelected(hour, minute)
}
timePickerFragment.show(supportFragmentManager, "timePicker")
}
private fun showAutoModeNoticeDialog() {
val dialog = AutoModeNoticeDialog(this)
dialog.setOnConfirmListener {
}
dialog.show()
}
}

View File

@@ -1,5 +1,6 @@
package com.example.defenseapplication.liveVideo
import android.content.Intent
import android.os.Bundle
import com.example.defenseapplication.R
import com.example.defenseapplication.base.BaseActivity
@@ -23,6 +24,10 @@ class SettingsActivity : BaseActivity() {
.statusBarDarkFont(true)
.titleBar(binding.topBar)
.init()
binding.itemVoiceSetting.setOnClickListener {
val intent = Intent(this, VoiceSettingsActivity::class.java)
startActivity(intent)
}
binding.ivBack.setOnClickListener {
finish()
}
@@ -57,6 +62,14 @@ class SettingsActivity : BaseActivity() {
}
dialog.show(supportFragmentManager, "CustomDialogFragment")
}
binding.itemWaterGunSetting.setOnClickListener {
val intent = Intent(this, WaterGunSettingsActivity::class.java)
startActivity(intent)
}
binding.itemAutoMode.setOnClickListener {
val intent = Intent(this, AutoModeActivity::class.java)
startActivity(intent)
}
}

View File

@@ -0,0 +1,51 @@
package com.example.defenseapplication.liveVideo
import android.content.Intent
import android.os.Bundle
import android.view.animation.AccelerateDecelerateInterpolator
import android.widget.ImageView
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.example.defenseapplication.R
import com.example.defenseapplication.databinding.SettingsActivityBinding
import com.example.defenseapplication.databinding.VoiceSettingsActivityBinding
import com.gyf.immersionbar.ImmersionBar
class VoiceSettingsActivity : AppCompatActivity() {
private lateinit var binding: VoiceSettingsActivityBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = VoiceSettingsActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
// ImmersionBar核心调用,沉浸式
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topBar)
.init()
binding.swWarningVoice.setOnCheckedChangeListener { _, isChecked ->
when(isChecked) {
true -> {
// 打开开关业务逻辑
}
false -> {
// 关闭开关业务逻辑
}
}
}
binding.rlWarningContent.setOnClickListener {
val intent= Intent(this, WarningVoiceContentActivity::class.java)
startActivity(intent)
}
binding.ivBack.setOnClickListener {
finish()
}
}
}

View File

@@ -0,0 +1,47 @@
package com.example.defenseapplication.liveVideo
import android.graphics.Color
import android.os.Bundle
import android.text.Editable
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.widget.doAfterTextChanged
import com.example.defenseapplication.databinding.WarningVoiceContentActivityBinding
import com.gyf.immersionbar.ImmersionBar
class WarningVoiceContentActivity : AppCompatActivity() {
private lateinit var binding: WarningVoiceContentActivityBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = WarningVoiceContentActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
// ImmersionBar核心调用,沉浸式
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topBar)
.init()
// 初始化计数显示
val initialLength = binding.etWarningContent.text.length
updateWordCount(initialLength)
// 添加文本变化监听
binding.etWarningContent.doAfterTextChanged { text ->
val length = text?.length ?: 0
updateWordCount(length)
}
binding.btnBack.setOnClickListener {
finish()
}
binding.btnSave.setOnClickListener {
//保存的逻辑
finish()
}
}
private fun updateWordCount(current: Int) {
binding.tvWordCount.text = "$current/100"
//字数达到上限时改变颜色
val color = if (current >= 100) Color.RED else Color.GRAY
binding.tvWordCount.setTextColor(color)
}
}

View File

@@ -0,0 +1,63 @@
package com.example.defenseapplication.liveVideo
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import com.example.defenseapplication.R
import com.example.defenseapplication.base.BaseActivity
import com.example.defenseapplication.databinding.WaterGunSettingsActivityBinding
import com.example.defenseapplication.view.ContainerSelectDialog
import com.example.defenseapplication.view.CustomDialogFragmentText
import com.gyf.immersionbar.ImmersionBar
class WaterGunSettingsActivity : BaseActivity() {
private lateinit var binding: WaterGunSettingsActivityBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = WaterGunSettingsActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topBar)
.init()
initListeners()
}
private fun initListeners() {
binding.ivBack.setOnClickListener {
finish()
}
binding.itemDistance.setOnClickListener {
val dialog = CustomDialogFragmentText()
.setTitle(getString(R.string.strike_distance))
.setInputText(binding.tvDistance.text.toString().replace("m", ""))
dialog.setOnConfirmListener { distance ->
binding.tvDistance.text = "${distance}m"
}
dialog.show(supportFragmentManager, "DistanceDialog")
}
binding.itemInterval.setOnClickListener {
val dialog = CustomDialogFragmentText()
.setTitle(getString(R.string.strike_interval))
.setInputText(binding.tvInterval.text.toString().replace("s", ""))
dialog.setOnConfirmListener { interval ->
binding.tvInterval.text = "${interval}s"
}
dialog.show(supportFragmentManager, "IntervalDialog")
}
binding.itemContainer.setOnClickListener {
val dialog = ContainerSelectDialog(this)
dialog.setSelectedContainer(binding.tvContainer.text.toString())
dialog.setOnConfirmListener { container ->
binding.tvContainer.text = container
}
dialog.show()
}
}
}