Kotlin高仿微信-第36篇-支付-设置金额
二维码收款页面点击设置金额,进来这个页面设置。这里使用自定义的数字键盘录入金额。
·
Kotlin高仿微信-项目实践58篇详细讲解了各个功能点,包括:注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。
效果图:

实现代码:
<?xml version="1.0" encoding="utf-8"?>
<layout>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/wc_base_bg">
<include layout="@layout/wc_base_top_title"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/qrcode_set_amount_tip"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/base_top_root_layout"
android:layout_marginLeft="20dp"
android:layout_marginTop="40dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="收款金额"
android:textColor="@color/black"
android:textSize="18sp"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/rechange_balance_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="@+id/qrcode_set_amount_tip"
app:layout_constraintTop_toBottomOf="@+id/qrcode_set_amount_tip"
android:layout_marginTop="10dp"
android:text="¥"
android:textSize="30sp"
android:textColor="@color/black"/>
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/qrcode_set_amount_balance"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/rechange_balance_unit"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginLeft="50dp"
android:layout_marginRight="20dp"
android:text=""
android:textSize="30sp"
android:textColor="@color/black"/>
<com.wn.wechatclientdemo.view.NumberKeyboardView
android:id="@+id/num_keyboard_view"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="match_parent"
android:layout_height="320dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
/**
* Author : wangning
* Email : maoning20080809@163.com
* Date : 2022/5/22 16:43
* Description : 二维码设置金额
*/
class QRCodeSetAmountFragment : BaseDataBindingFragment<WcPaymentSetAmountBinding>(), MyDispatchTouchEventListener {
override fun getLayoutRes() = R.layout.wc_payment_set_amount
private var navController : NavController? = null
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
super.builder().setTitleContent(R.string.wc_base_top_set_amount)
UIStatusUtils.setStatusBarColor(requireActivity(), BaseUtils.getColor(R.color.wc_base_bg))
DispatchTouchEventUtils.registerDispatchTouchListener(this)
navController = findNavController()
qrcode_set_amount_balance.showSoftInputOnFocus = false
num_keyboard_view.initEditText(qrcode_set_amount_balance)
qrcode_set_amount_balance.setOnClickListener {
num_keyboard_view.visibility = View.VISIBLE
}
num_keyboard_item_recharge.setOnClickListener {
var result = qrcode_set_amount_balance.text.toString()
if(TextUtils.isEmpty(result)){
ToastUtils.makeText(requireActivity(), "请输入金额")
return@setOnClickListener
}
navController?.previousBackStackEntry?.savedStateHandle?.set(CommonUtils.QRCommon.BALANCE, qrcode_set_amount_balance.text.toString().toFloat())
//弹出的id为fragment,不能为action
navController?.popBackStack(R.id.nav_qrcode_set_amount, true)
}
}
override fun onDestroy() {
super.onDestroy()
UIStatusUtils.setStatusBarColor(requireActivity(), BaseUtils.getColor(R.color.color_FFD700))
DispatchTouchEventUtils.unregisterDispatchTouchListener(this)
}
override fun dispatchTouchEvent(ev: MotionEvent) {
if (ev.action == MotionEvent.ACTION_DOWN) {
if (SoftInputUtils.isInput(qrcode_set_amount_balance, ev)) {
num_keyboard_view?.visibility = View.GONE
}
}
}
override fun onResume() {
super.onResume()
qrcode_set_amount_balance.isFocusableInTouchMode = true
qrcode_set_amount_balance.requestFocus()
qrcode_set_amount_balance.setOnKeyListener { view, i, keyEvent ->
if (i == KeyEvent.KEYCODE_BACK && keyEvent.getAction() == KeyEvent.ACTION_DOWN) {
if(num_keyboard_view.visibility == View.VISIBLE){
hideNumKeyboardView()
true
} else {
false
}
} else {
false
}
}
}
private fun hideNumKeyboardView(){
num_keyboard_view.visibility = View.GONE
}
}
自定义数字键盘:
/**
* Author : wangning
* Email : maoning20080809@163.com
* Date : 2022/5/21 14:58
* Description : 自定义充值键盘
*/
class NumberKeyboardView : RelativeLayout , View.OnClickListener {
constructor(context: Context) : this(context, null)
constructor(context: Context, attributeSet: AttributeSet?) : this(context, attributeSet, 0)
constructor(context: Context, attributeSet: AttributeSet?, defStyleAttr : Int) : super(context, attributeSet, defStyleAttr){
initView()
}
private var view : View? = null
private var viewList = arrayOfNulls<View>(13)
private var inputEditText : EditText? = null
private var result :String = ""
fun initView() {
view = LayoutInflater.from(WcApp.getContext()).inflate(R.layout.wc_number_keyboard_item, this, true)
viewList = arrayOf(findView(R.id.num_keyboard_item_1),findView(R.id.num_keyboard_item_2),findView(R.id.num_keyboard_item_3),findView(R.id.num_keyboard_item_4),
findView(R.id.num_keyboard_item_5),findView(R.id.num_keyboard_item_6),findView(R.id.num_keyboard_item_7),findView(R.id.num_keyboard_item_8),
findView(R.id.num_keyboard_item_9),findView(R.id.num_keyboard_item_0),findView(R.id.delete),findView(R.id.num_keyboard_item_spot),findView(R.id.num_keyboard_item_recharge),)
setListener()
}
private fun setListener(){
for (item in viewList) {
item?.setOnClickListener(this)
}
}
override fun onClick(v: View) {
when(v.id) {
R.id.delete -> {
if(result.length > 0){
result = result.substring(0, result.length - 1)
inputEditText?.setText(result)
inputEditText?.setSelection(result.length)
}
}
R.id.num_keyboard_item_recharge -> {TagUtils.d("充值222")}
else -> {
var numberView = v as TextView
result += numberView.text.toString()
inputEditText?.setText(result)
//光标放在最后
inputEditText?.setSelection(result.length)
}
}
}
fun initEditText(inputET: EditText){
inputEditText = inputET
}
//设置充值按钮的背景
fun setRechargeBackground(resId : Int){
num_keyboard_item_recharge.setBackgroundResource(resId)
}
fun setValue(resId: Int){
num_keyboard_item_recharge.text = BaseUtils.getString(resId)
}
private fun findView(id : Int) : View {
return view?.findViewById(id)!!
}
}
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="320dp"
android:orientation="horizontal"
android:background="#F8F8F8"
tools:ignore="MissingDefaultResource">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="3"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="75dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/num_keyboard_item_1"
style="@style/NumKeyboard"
android:layout_weight="1"
android:text="1"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/num_keyboard_item_2"
style="@style/NumKeyboard"
android:layout_weight="1"
android:text="2"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/num_keyboard_item_3"
style="@style/NumKeyboard"
android:layout_weight="1"
android:text="3"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="75dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/num_keyboard_item_4"
style="@style/NumKeyboard"
android:layout_weight="1"
android:text="4"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/num_keyboard_item_5"
style="@style/NumKeyboard"
android:layout_weight="1"
android:text="5"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/num_keyboard_item_6"
style="@style/NumKeyboard"
android:layout_weight="1"
android:text="6"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="75dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/num_keyboard_item_7"
style="@style/NumKeyboard"
android:layout_weight="1"
android:text="7"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/num_keyboard_item_8"
style="@style/NumKeyboard"
android:layout_weight="1"
android:text="8"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/num_keyboard_item_9"
style="@style/NumKeyboard"
android:layout_weight="1"
android:text="9"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="75dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/num_keyboard_item_0"
style="@style/NumKeyboard"
android:layout_weight="1"
android:text="0"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/num_keyboard_item_spot"
style="@style/NumKeyboard"
android:layout_weight="2"
android:text="."/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_weight="1"
android:layout_width="50dp"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="88dp"
android:layout_marginTop="12dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_weight="1">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/delete"
android:layout_width="54dp"
android:layout_height="54dp"
android:layout_centerInParent="true"
android:background="@drawable/wc_base_num_delete_selector"
android:padding="10dp"
android:src="@drawable/wc_recharge_delete" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="14dp"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:layout_marginBottom="20dp"
android:layout_weight="3">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/num_keyboard_item_recharge"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/wc_base_green_selector"
android:gravity="center"
android:text="充值"
android:textColor="@color/white"
android:textSize="24sp"
android:textStyle="bold" />
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</layout>
更多推荐



所有评论(0)