最近做一个数字键盘的自定义view
大概思路就是弹窗里面有个0-9的数字键盘(通过recycleview实现),点击可以展示选择的数字
代码如下:
遇到问题记录一下:
字符串拼接:inputcontent += “$content”
如果想要将pop里面的数据传到activity,最好就在当前activity里面展示pop
1. implementation 'com.github.li-xiaojun:XPopup:2.9.0'
2. implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46'
2.
class PopupWindowActivity : AppCompatActivity() {
private lateinit var binding: ActivityPopupWindowBinding
lateinit var popWindow : BasePopupView
lateinit var textView: TextView
lateinit var etContent : String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityPopupWindowBinding.inflate(layoutInflater)
setContentView(binding.root)
initEvent()
}
private fun initEvent() {
textView = binding.tvOpen
textView.setOnClickListener {
popWindow = XPopup.Builder(this)
.autoFocusEditText(false)
.autoOpenSoftInput(false)
.dismissOnTouchOutside(true)
// .watchView()
.asCustom(object : CenterPopupView(this){
lateinit var keyList : MutableList<String>
lateinit var adpter:KeyBoardAdpter
lateinit var edittext: EditText
lateinit var tvClosePop:TextView
lateinit var gridLayoutManager: GridLayoutManager
override fun getImplLayoutId(): Int = R.layout.custom_popup
override fun onCreate() {
super.onCreate()
initView()
initData()
initEventChild()
}
private fun initEventChild() {
tvClosePop.setOnClickListener {
popWindow.dismiss()
textView.text = etContent
}
gridLayoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup(){
override fun getSpanSize(position: Int): Int {
return if (position !== 10) 1 else 2
}
}
}
private fun initData() {
//获取资源文件数据
keyList = ArrayList()
val keyboards = context.resources.getStringArray(R.array.keyboard)
for (ele in keyboards){
keyList.add(ele)
}
adpter.addData(keyList)
}
private fun initView() {
val rvKeyboardNumber = findViewById<RecyclerView>(R.id.rv_keyboard_number)
tvClosePop = findViewById<TextView>(R.id.tv_close_pop)
var inputcontent: String = "" //字符串拼接使用
gridLayoutManager = GridLayoutManager(context,3)
rvKeyboardNumber.layoutManager = gridLayoutManager
adpter = KeyBoardAdpter(R.layout.item_keyboard_key)
rvKeyboardNumber.adapter = adpter
edittext = findViewById(R.id.et_show_input)
adpter.setOnItemChildClickListener { adapter, view, position ->
if (position <10){
val content = (view as TextView).text
inputcontent += "$content"
edittext.setText(inputcontent)
etContent = inputcontent
}else{
inputcontent = inputcontent.dropLast(1)
edittext.setText(inputcontent)
etContent = inputcontent
}
}
}
}).show()
}
}
}