布局文件
<?xml version="1.0" encoding="utf-8"?> <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:id="@+id/idInputLayout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="visible" tools:context=".MyInputNumberView">> <Button android:id="@+id/idInput0" android:layout_width="50dp" android:layout_height="50dp" android:autoSizeTextType="uniform" android:text="0" app:cornerRadius="50dp" app:layout_constraintStart_toEndOf="@+id/idInput9" app:layout_constraintTop_toBottomOf="@+id/idInput5" /> <Button android:id="@+id/idInput6" android:layout_width="50dp" android:layout_height="50dp" android:autoSizeTextType="uniform" android:text="6" app:cornerRadius="50dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/idInput1" /> <Button android:id="@+id/idInput7" android:layout_width="50dp" android:layout_height="50dp" android:autoSizeTextType="uniform" android:text="7" app:cornerRadius="50dp" app:layout_constraintStart_toEndOf="@+id/idInput6" app:layout_constraintTop_toBottomOf="@+id/idInput2" /> <Button android:id="@+id/idInput8" android:layout_width="50dp" android:layout_height="50dp" android:autoSizeTextType="uniform" android:text="8" app:cornerRadius="50dp" app:layout_constraintStart_toEndOf="@+id/idInput7" app:layout_constraintTop_toBottomOf="@+id/idInput3" /> <Button android:id="@+id/idInput9" android:layout_width="50dp" android:layout_height="50dp" android:autoSizeTextType="uniform" android:text="9" app:cornerRadius="50dp" app:layout_constraintStart_toEndOf="@+id/idInput8" app:layout_constraintTop_toBottomOf="@+id/idInput4" /> <Button android:id="@+id/idInput5" android:layout_width="50dp" android:layout_height="50dp" android:autoSizeTextType="uniform" android:text="5" app:cornerRadius="50dp" app:layout_constraintStart_toEndOf="@+id/idInput4" app:layout_constraintTop_toTopOf="@+id/idInput3" /> <Button android:id="@+id/idInput4" android:layout_width="50dp" android:layout_height="50dp" android:autoSizeTextType="uniform" android:text="4" app:cornerRadius="50dp" app:layout_constraintStart_toEndOf="@+id/idInput3" app:layout_constraintTop_toTopOf="@+id/idInput3" /> <Button android:id="@+id/idInput3" android:layout_width="50dp" android:layout_height="50dp" android:autoSizeTextType="uniform" android:text="3" app:cornerRadius="50dp" app:layout_constraintStart_toEndOf="@+id/idInput2" app:layout_constraintTop_toBottomOf="@+id/idInputText" /> <Button android:id="@+id/idInput2" android:layout_width="50dp" android:layout_height="50dp" android:autoSizeTextType="uniform" android:text="2" app:cornerRadius="50dp" app:layout_constraintStart_toEndOf="@+id/idInput1" app:layout_constraintTop_toTopOf="@+id/idInput3" /> <Button android:id="@+id/idInputDec" android:layout_width="50dp" android:layout_height="50dp" android:autoSizeTextType="uniform" android:text="-" app:cornerRadius="5dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/idInputAdd" android:layout_width="50dp" android:layout_height="50dp" android:autoSizeTextType="uniform" android:text="+" app:cornerRadius="5dp" app:layout_constraintStart_toEndOf="@+id/idInputText" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/idInput1" android:layout_width="50dp" android:layout_height="50dp" android:autoSizeTextType="uniform" android:text="1" android:textAlignment="center" app:cornerRadius="50dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/idInputDec" /> <EditText android:id="@+id/idInputText" android:layout_width="150dp" android:layout_height="50dp" android:autoSizeTextType="uniform" android:editable="true" android:ems="10" android:inputType="text" app:layout_constraintEnd_toStartOf="@+id/idInputAdd" app:layout_constraintStart_toEndOf="@+id/idInputDec" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/idInputDel" android:layout_width="70dp" android:layout_height="0dp" android:autoSizeTextType="uniform" android:text="del" app:cornerRadius="20dp" app:layout_constraintBottom_toTopOf="@+id/idInput5" app:layout_constraintStart_toEndOf="@+id/idInputAdd" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/idInputComfirm" android:layout_width="70dp" android:layout_height="0dp" android:autoSizeTextType="uniform" android:text="@string/str_confirm" android:textColor="@color/orange" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toEndOf="@+id/idInput0" app:layout_constraintTop_toBottomOf="@+id/idInputDel" /> </androidx.constraintlayout.widget.ConstraintLayout>
布局类
package xuganquan.app.topwisdom import android.content.Context import android.text.Editable import android.text.TextWatcher import android.view.LayoutInflater import androidx.constraintlayout.widget.ConstraintLayout import xuganquan.app.topwisdom.databinding.MylayoutInputNumberBinding interface IOnMyInputChange{ fun onMyInputChange(str: String) } class MyInputNumberView: ConstraintLayout { private lateinit var binding: MylayoutInputNumberBinding /*private var mDec:Button?= null private var mAdd:Button?= null private var mDel:Button?= null private var mConfirm:Button?= null private var mText:TextView?= null private var mInput1:Button?= null private var mInput2:Button?= null private var mInput3:Button?= null private var mInput4:Button?= null private var mInput5:Button?= null private var mInput6:Button?= null private var mInput7:Button?= null private var mInput8:Button?= null private var mInput9:Button?= null private var mInput0:Button?= null*/ private var mValueStr:String= "0" public lateinit var mlistener:IOnMyInputChange constructor(context: Context):super(context){ binding=MylayoutInputNumberBinding.inflate(LayoutInflater.from(context),this,true) binding.idInputText.setText("") //.text baocuo setUpEvent() } init{ /* mDec=bindingView.findViewById<Button>(R.id.idInputDec) mAdd=bindingView.findViewById<Button>(R.id.idInputAdd) mDel=bindingView.findViewById<Button>(R.id.idInputDel) mConfirm=bindingView.findViewById<Button>(R.id.idInputComfirm) mText=bindingView.findViewById<TextView>(R.id.idInputText) mInput1=bindingView.findViewById<Button>(R.id.idInput1) mInput2=bindingView.findViewById<Button>(R.id.idInput2) mInput3=bindingView.findViewById<Button>(R.id.idInput3) mInput4=bindingView.findViewById<Button>(R.id.idInput4) mInput5=bindingView.findViewById<Button>(R.id.idInput5) mInput6=bindingView.findViewById<Button>(R.id.idInput6) mInput7=bindingView.findViewById<Button>(R.id.idInput7) mInput8=bindingView.findViewById<Button>(R.id.idInput8) mInput9=bindingView.findViewById<Button>(R.id.idInput9) mInput0=bindingView.findViewById<Button>(R.id.idInput0)*/ } // 4. 处理事件 private fun setUpEvent() { binding.idInputText.addTextChangedListener( object: TextWatcher { override fun afterTextChanged(s: Editable) {} override fun beforeTextChanged( s: CharSequence, start: Int, count: Int, after: Int ) { } override fun onTextChanged( s: CharSequence, start: Int, before: Int, count: Int ) { // listener?.onMyInputChange(mValueStr) } }) binding.idInputDec.setOnClickListener { mValueStr=binding.idInputText.text.toString() var mValueInt=mValueStr.toIntOrNull() if(null==mValueInt) mValueInt=0 else mValueInt-=1 mValueStr=mValueInt.toString() updateValueText() } binding.idInputAdd.setOnClickListener { mValueStr=binding.idInputText.text.toString() var mValueInt2=mValueStr.toIntOrNull() if(null==mValueInt2) mValueInt2=0 else mValueInt2 += 1 mValueStr=mValueInt2.toString() updateValueText() } binding.idInputDel.setOnClickListener { mValueStr="" updateValueText() } binding.idInputComfirm.setOnClickListener { mValueStr=binding.idInputText.text.toString() mlistener.onMyInputChange(mValueStr) } binding.idInput1.setOnClickListener { mValueStr=binding.idInputText.text.toString() mValueStr+="1" updateValueText() } binding.idInput2.setOnClickListener { mValueStr=binding.idInputText.text.toString() mValueStr+="2" updateValueText() } binding.idInput3.setOnClickListener { mValueStr=binding.idInputText.text.toString() mValueStr+="3" updateValueText() } binding.idInput4.setOnClickListener { mValueStr=binding.idInputText.text.toString() mValueStr+="4" updateValueText() } binding.idInput5.setOnClickListener { mValueStr=binding.idInputText.text.toString() mValueStr+="5" updateValueText() } binding.idInput6.setOnClickListener { mValueStr=binding.idInputText.text.toString() mValueStr+="6" updateValueText() } binding.idInput7.setOnClickListener { mValueStr=binding.idInputText.text.toString() mValueStr+="7" updateValueText() } binding.idInput8.setOnClickListener { mValueStr=binding.idInputText.text.toString() mValueStr+="8" updateValueText() } binding.idInput9.setOnClickListener { mValueStr=binding.idInputText.text.toString() mValueStr+="9" updateValueText() } binding.idInput0.setOnClickListener { mValueStr=binding.idInputText.text.toString() mValueStr+="0" updateValueText() } } private fun updateValueText() { binding.idInputText.setText(mValueStr) //.textbaocuo } }
使用示例
val inputView1 = MyInputNumberView(mLayout.context).apply { visibility = View.INVISIBLE id = mNewID++ layoutParams = ConstraintLayout.LayoutParams(mWidth, mHeight).apply { startToStart = mID topToTop = mID //endToEnd = mID //bottomToBottom = mID leftMargin = mViewMargins[1][0] topMargin = mViewMargins[1][1] //rightMargin =mViewMargins[1][2] // bottomMargin=mViewMargins[1][3] //width = mViewSizes[1][0] //height = mViewSizes[1][1] } mLayout.addView(this) visibility = View.VISIBLE }