新增數值輸入UI元件
This commit is contained in:
parent
dd3b2f5f11
commit
8a1ffa8969
@ -0,0 +1,114 @@
|
||||
package com.ray650128.floatingwindow.view
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.text.InputType
|
||||
import android.util.AttributeSet
|
||||
import android.widget.Button
|
||||
import android.widget.EditText
|
||||
import android.widget.ImageButton
|
||||
import android.widget.LinearLayout
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.ray650128.floatingwindow.R
|
||||
import com.ray650128.floatingwindow.dp
|
||||
import com.ray650128.floatingwindow.px
|
||||
|
||||
class ValueEditor: LinearLayout {
|
||||
|
||||
constructor(context: Context): super(context) {
|
||||
this.context = context
|
||||
initContentView()
|
||||
}
|
||||
|
||||
constructor(context: Context, attrs: AttributeSet): super(context, attrs) {
|
||||
this.context = context
|
||||
initContentView()
|
||||
}
|
||||
|
||||
constructor(context: Context, attrs: AttributeSet, intRes: Int): super(context, attrs, intRes) {
|
||||
this.context = context
|
||||
initContentView()
|
||||
}
|
||||
|
||||
private lateinit var context: Context
|
||||
|
||||
private var onValueChangeListener: OnValueChangeListener? = null
|
||||
|
||||
private val btnAdd by lazy {
|
||||
ImageButton(context).apply {
|
||||
setImageResource(R.drawable.ic_value_add)
|
||||
setBackgroundColor(Color.TRANSPARENT)
|
||||
layoutParams = LayoutParams(48.dp, 48.dp)
|
||||
}
|
||||
}
|
||||
|
||||
private val btnValue by lazy {
|
||||
Button(context).apply {
|
||||
text = "$value"
|
||||
setBackgroundColor(Color.TRANSPARENT)
|
||||
layoutParams = LayoutParams(0, 48.dp).apply {
|
||||
weight = 1.0f
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val btnMinus by lazy {
|
||||
ImageButton(context).apply {
|
||||
setImageResource(R.drawable.ic_value_minus)
|
||||
setBackgroundColor(Color.TRANSPARENT)
|
||||
layoutParams = LayoutParams(48.dp, 48.dp)
|
||||
}
|
||||
}
|
||||
|
||||
var value: Int = 0
|
||||
set(value) {
|
||||
field = value
|
||||
btnValue.text = "$value"
|
||||
}
|
||||
|
||||
private fun initContentView() {
|
||||
this.orientation = HORIZONTAL
|
||||
|
||||
this.addView(btnAdd)
|
||||
this.addView(btnValue)
|
||||
this.addView(btnMinus)
|
||||
|
||||
btnAdd.setOnClickListener {
|
||||
onValueChangeListener?.onValueAdd()
|
||||
}
|
||||
|
||||
btnValue.setOnClickListener {
|
||||
AlertDialog.Builder(context).apply {
|
||||
val editText = EditText(context).apply {
|
||||
inputType = InputType.TYPE_CLASS_NUMBER
|
||||
}
|
||||
setTitle("請輸入想要的值")
|
||||
setView(editText)
|
||||
setPositiveButton("確定") { dialog, _ ->
|
||||
val inputText = editText.text?.toString()?.toIntOrNull()
|
||||
onValueChangeListener?.onValueClick(inputText)
|
||||
dialog.dismiss()
|
||||
}
|
||||
setNegativeButton("取消") { dialog, _ ->
|
||||
dialog.dismiss()
|
||||
}
|
||||
}.show()
|
||||
}
|
||||
|
||||
btnMinus.setOnClickListener {
|
||||
onValueChangeListener?.onValueMinus()
|
||||
}
|
||||
}
|
||||
|
||||
fun setOnValueChangeListener(listener: OnValueChangeListener) {
|
||||
this.onValueChangeListener = listener
|
||||
}
|
||||
|
||||
interface OnValueChangeListener {
|
||||
fun onValueAdd()
|
||||
|
||||
fun onValueMinus()
|
||||
|
||||
fun onValueClick(value: Int?)
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user