房间 "夺宝精灵" 自定义购买弹窗 支持输入数量

This commit is contained in:
wzq
2023-10-12 16:01:23 +08:00
parent e585899c44
commit b92c97dfb9
3 changed files with 65 additions and 31 deletions

View File

@@ -4,15 +4,20 @@ import android.annotation.SuppressLint
import android.os.Bundle
import android.view.Gravity
import android.view.WindowManager
import androidx.core.widget.doAfterTextChanged
import androidx.fragment.app.activityViewModels
import com.hjq.toast.ToastUtils
import com.yizhuan.erban.R
import com.yizhuan.erban.base.BaseDialog
import com.yizhuan.erban.databinding.TreasureFairyDialogBuyDebrisModifyQuantityBinding
import com.yizhuan.erban.treasure_box.activity.TreasureBoxActivity
import com.yizhuan.erban.treasurefairy.FairyViewModel
import com.yizhuan.xchat_android_core.auth.AuthModel
import com.yizhuan.xchat_android_core.manager.AvRoomDataManager
import com.yizhuan.xchat_android_core.utils.StringUtils
import com.yizhuan.xchat_android_library.common.SpConstants
import com.yizhuan.xchat_android_library.common.util.SPUtils
import com.yizhuan.xchat_android_library.utils.SingleToastUtil
import com.yizhuan.xchat_android_library.utils.TimeUtils
/**
@@ -44,21 +49,49 @@ class FairyBuyDebrisModifyQuantityDialog :
override fun init() {
num = requireArguments().getInt("num")
binding.tvDebrisNum.text = num.toString()
binding.etNum.setText(num.toString())
binding.tvPrizeName.text = (num * price).toString()
binding.ivDecrease.setOnClickListener {
num = (num - 10).coerceAtLeast(1)
binding.tvDebrisNum.text = num.toString()
binding.etNum.setText(num.toString())
binding.etNum.setSelection(num.toString().length)
binding.tvPrizeName.text = (num * price).toString()
}
binding.ivIncrease.setOnClickListener {
num = (num + 10).coerceAtMost(200)
binding.tvDebrisNum.text = num.toString()
binding.etNum.setText(num.toString())
binding.etNum.setSelection(num.toString().length)
binding.tvPrizeName.text = (num * price).toString()
}
binding.etNum.doAfterTextChanged {
var n = StringUtils.toInt(binding.etNum.text.toString(), 0)
if (n < 1) {
binding.etNum.setText("1")
binding.etNum.setSelection(1)
num = 1
return@doAfterTextChanged
}
if (n > TreasureBoxActivity.MAX_BUY_QUANTITY_LIMIT) {
n = TreasureBoxActivity.MAX_BUY_QUANTITY_LIMIT
binding.etNum.setText(n.toString())
binding.etNum.setSelection(n.toString().length)
SingleToastUtil.showToast(
getString(
R.string.treasure_box_activity_treasureboxactivity_01,
TreasureBoxActivity.MAX_BUY_QUANTITY_LIMIT
)
)
}
binding.tvPrizeName.text = (n * price).toString()
num = n
}
binding.tvBuy.setOnClickListener {
viewModel.buyDebris(num, AuthModel.get().currentUid.toString())
}

View File

@@ -68,8 +68,8 @@
app:layout_constraintTop_toBottomOf="@+id/iv_prize_icon"
tools:text="10000" />
<TextView
android:id="@+id/tv_debris_num"
<EditText
android:id="@+id/et_num"
android:layout_width="0dp"
android:layout_height="@dimen/dp_29"
android:layout_marginStart="@dimen/dp_26"
@@ -77,6 +77,7 @@
android:layout_marginEnd="@dimen/dp_26"
android:background="@color/color_306065"
android:gravity="center"
android:inputType="number"
android:text="@string/zero"
android:textColor="@color/white"
android:textSize="@dimen/sp_12"
@@ -90,9 +91,9 @@
android:layout_height="@dimen/dp_29"
android:layout_marginStart="@dimen/dp_42"
android:src="@drawable/ic_dialog_fairy_buy_debris_decrease"
app:layout_constraintBottom_toBottomOf="@id/tv_debris_num"
app:layout_constraintBottom_toBottomOf="@id/et_num"
app:layout_constraintStart_toStartOf="@id/view_bg"
app:layout_constraintTop_toTopOf="@id/tv_debris_num" />
app:layout_constraintTop_toTopOf="@id/et_num" />
<ImageView
android:id="@+id/iv_increase"
@@ -100,9 +101,9 @@
android:layout_height="@dimen/dp_29"
android:layout_marginEnd="@dimen/dp_42"
android:src="@drawable/ic_dialog_fairy_buy_debris_increase"
app:layout_constraintBottom_toBottomOf="@id/tv_debris_num"
app:layout_constraintBottom_toBottomOf="@id/et_num"
app:layout_constraintEnd_toEndOf="@id/view_bg"
app:layout_constraintTop_toTopOf="@id/tv_debris_num" />
app:layout_constraintTop_toTopOf="@id/et_num" />
<com.coorchice.library.SuperTextView
android:id="@+id/tv_buy"
@@ -117,7 +118,7 @@
app:corner="@dimen/dp_18"
app:layout_constraintEnd_toEndOf="@id/view_bg"
app:layout_constraintStart_toStartOf="@id/view_bg"
app:layout_constraintTop_toBottomOf="@id/tv_debris_num"
app:layout_constraintTop_toBottomOf="@id/et_num"
app:shaderEnable="true"
app:shaderEndColor="@color/color_3AEAC7"
app:shaderMode="topToBottom"

View File

@@ -53,30 +53,30 @@ class BoxLoveLackDialog : BaseDialog<TreasureBoxDialogLoveLackBinding>() {
override fun init() {
num = requireArguments().getInt("num")
binding?.editNum?.setText(num.toString())
binding?.tvPrizeName?.text = (num * ticketPrice).toString()
binding.editNum.setText(num.toString())
binding.tvPrizeName.text = (num * ticketPrice).toString()
binding?.ivSub?.setOnClickListener {
binding.ivSub.setOnClickListener {
val editNum =
(StringUtils.toInt(binding?.editNum?.text.toString(), 0) - 10).coerceAtLeast(1)
binding?.editNum?.setText(editNum.toString())
binding?.tvPrizeName?.text = (editNum * ticketPrice).toString()
(StringUtils.toInt(binding.editNum.text.toString(), 0) - 10).coerceAtLeast(1)
binding.editNum.setText(editNum.toString())
binding.tvPrizeName.text = (editNum * ticketPrice).toString()
}
binding?.ivAdd?.setOnClickListener {
binding.ivAdd.setOnClickListener {
val editNum =
(StringUtils.toInt(binding?.editNum?.text.toString(), 0) + 10).coerceAtMost(
(StringUtils.toInt(binding.editNum.text.toString(), 0) + 10).coerceAtMost(
MAX_BUY_QUANTITY_LIMIT
)
binding?.editNum?.setText(editNum.toString())
binding?.tvPrizeName?.text = (editNum * ticketPrice).toString()
binding.editNum.setText(editNum.toString())
binding.tvPrizeName.text = (editNum * ticketPrice).toString()
}
binding?.ivClose?.setOnClickListener {
binding.ivClose.setOnClickListener {
dismissAllowingStateLoss()
}
binding?.tvBuy?.setOnClickListener {
binding.tvBuy.setOnClickListener {
BoxModel.get()
.buyTicket(num)
.compose(bindToLifecycle())
@@ -93,13 +93,13 @@ class BoxLoveLackDialog : BaseDialog<TreasureBoxDialogLoveLackBinding>() {
}
}
binding?.editNum?.addTextChangedListener(object : TextWatcherWrapper() {
binding.editNum.addTextChangedListener(object : TextWatcherWrapper() {
override fun afterTextChanged(editable: Editable) {
var n = StringUtils.toInt(binding?.editNum?.text.toString(), 0)
var n = StringUtils.toInt(binding.editNum.text.toString(), 0)
if (n > MAX_BUY_QUANTITY_LIMIT) {
n = MAX_BUY_QUANTITY_LIMIT
binding?.editNum?.setText(n.toString())
binding?.editNum?.setSelection(3)
binding.editNum.setText(n.toString())
binding.editNum.setSelection(3)
SingleToastUtil.showToast(
getString(
R.string.treasure_box_activity_treasureboxactivity_01,
@@ -107,19 +107,19 @@ class BoxLoveLackDialog : BaseDialog<TreasureBoxDialogLoveLackBinding>() {
)
)
}
binding?.tvPrizeName?.text = (n * ticketPrice).toString()
binding.tvPrizeName.text = (n * ticketPrice).toString()
num = n
}
})
SoftKeyboardStateHelper(binding?.editNum).addSoftKeyboardStateListener(object :
SoftKeyboardStateHelper(binding.editNum).addSoftKeyboardStateListener(object :
SoftKeyboardStateListener {
override fun onSoftKeyboardOpened(keyboardHeightInPx: Int) {}
override fun onSoftKeyboardClosed() {
val num = StringUtils.toInt(binding?.editNum?.text.toString(), 0)
val num = StringUtils.toInt(binding.editNum.text.toString(), 0)
if (num == 0) {
binding?.editNum?.setText("1")
binding?.editNum?.setSelection(1)
binding.editNum.setText("1")
binding.editNum.setSelection(1)
}
}
})