设置页面(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,40 @@
package com.example.defenseapplication.view
import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.view.Gravity
import android.view.WindowManager
import com.example.defenseapplication.R
import com.example.defenseapplication.databinding.DialogAutoModeNoticeBinding
class AutoModeNoticeDialog(context: Context) : Dialog(context) {
private lateinit var binding: DialogAutoModeNoticeBinding
private var onConfirmListener: (() -> Unit)? = null
fun setOnConfirmListener(listener: () -> Unit) {
this.onConfirmListener = listener
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DialogAutoModeNoticeBinding.inflate(layoutInflater)
setContentView(binding.root)
val window = window
window?.let {
val params = it.attributes
params.gravity = Gravity.BOTTOM
params.width = WindowManager.LayoutParams.MATCH_PARENT
params.height = WindowManager.LayoutParams.WRAP_CONTENT
it.attributes = params
it.setBackgroundDrawableResource(R.drawable.round_bg)
}
binding.btnConfirm.setOnClickListener {
onConfirmListener?.invoke()
dismiss()
}
}
}

View File

@@ -0,0 +1,101 @@
package com.example.defenseapplication.view
import android.app.Dialog
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.WindowManager
import com.example.defenseapplication.R
import com.example.defenseapplication.databinding.DialogContainerSelectBinding
class ContainerSelectDialog(context: Context) {
private val dialog: Dialog = Dialog(context)
private val binding: DialogContainerSelectBinding
private var selectedContainer: String = "容器4"
private var onConfirmListener: ((String) -> Unit)? = null
init {
binding = DialogContainerSelectBinding.inflate(LayoutInflater.from(context))
dialog.setContentView(binding.root)
dialog.window?.apply {
setGravity(Gravity.BOTTOM)
setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT)
setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
}
initListeners()
}
private fun initListeners() {
binding.btnCancel.setOnClickListener {
dialog.dismiss()
}
binding.btnConfirm.setOnClickListener {
onConfirmListener?.invoke(selectedContainer)
dialog.dismiss()
}
binding.itemContainer1.setOnClickListener {
selectContainer("容器1")
}
binding.itemContainer2.setOnClickListener {
selectContainer("容器2")
}
binding.itemContainer3.setOnClickListener {
selectContainer("容器3")
}
binding.itemContainer4.setOnClickListener {
selectContainer("容器4")
}
}
private fun selectContainer(container: String) {
selectedContainer = container
updateSelectedStyle()
}
private fun updateSelectedStyle() {
val bgSelected = R.drawable.bg_bottom_sheet_rounded
val bgNormal = android.R.color.transparent
binding.itemContainer1.setBackgroundResource(if (selectedContainer == "容器1") bgSelected else bgNormal)
binding.itemContainer2.setBackgroundResource(if (selectedContainer == "容器2") bgSelected else bgNormal)
binding.itemContainer3.setBackgroundResource(if (selectedContainer == "容器3") bgSelected else bgNormal)
binding.itemContainer4.setBackgroundResource(if (selectedContainer == "容器4") bgSelected else bgNormal)
val textViews = listOf(binding.itemContainer1.getChildAt(0) as android.widget.TextView,
binding.itemContainer2.getChildAt(0) as android.widget.TextView,
binding.itemContainer3.getChildAt(0) as android.widget.TextView,
binding.itemContainer4.getChildAt(0) as android.widget.TextView)
textViews.forEach { tv ->
tv.setTextColor(if (tv.text == selectedContainer) dialog.context.getColor(R.color.black) else dialog.context.getColor(R.color.gray))
}
}
fun setSelectedContainer(container: String) {
selectedContainer = container
updateSelectedStyle()
}
fun setOnConfirmListener(listener: (String) -> Unit) {
this.onConfirmListener = listener
}
fun show() {
updateSelectedStyle()
dialog.show()
}
fun dismiss() {
dialog.dismiss()
}
}

View File

@@ -0,0 +1,33 @@
import android.app.Dialog
import android.app.TimePickerDialog
import android.os.Bundle
import android.text.format.DateFormat
import android.widget.TimePicker
import androidx.fragment.app.DialogFragment
import java.util.Calendar
class TimePickerFragment(private val onTimeSelected: (hour: Int, minute: Int) -> Unit) :
DialogFragment(), TimePickerDialog.OnTimeSetListener {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
// 使用当前时间作为默认值
val c = Calendar.getInstance()
val hour = c.get(Calendar.HOUR_OF_DAY)
val minute = c.get(Calendar.MINUTE)
// 创建并返回 TimePickerDialog 实例
// activity 参数需要可空性处理this是OnTimeSetListener最后一个是是否24小时制
return TimePickerDialog(
requireActivity(),
this,
hour,
minute,
DateFormat.is24HourFormat(activity)
)
}
override fun onTimeSet(view: TimePicker?, hourOfDay: Int, minute: Int) {
// 当用户设置时间时,通过回调将结果传回
onTimeSelected(hourOfDay, minute)
}
}