最近在创建动态布局的时候遇到的一些问题总结一下:
因为这里不是创建一个edittext而是多个edittext;先贴上代码:
val linearLayout = LinearLayout(getApplication())
lp.setMargins(10, 15, 0, 5)
linearLayout.layoutParams = lp
linearLayout.orientation = LinearLayout.HORIZONTAL
val tv = TextView(getApplication())
tv.setTextColor(ContextCompat.getColor(getApplication(), R.color.c_888888))
tv.layoutParams = tvp
val et = EditText(getApplication())
et.layoutParams = lp2
et.setPadding(15, 8, 15, 8)
et.background = ContextCompat.getDrawable(getApplication(), R.drawable.shape_corner_3_f5f5f5)
tv.text = s
et.id = type.toInt() //这里是自己定义的一个数据便于后面操作
val lp = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)
val lp2 = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)
val tvp = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)
这里设不设置焦点都没关系,因为edittext自带焦点的,暂时效果这里不作暂时,是显示出来的,一个问题出来了,当设置onclicklistener的时候,会发现会点击两次才会弹出软键盘,回到刚刚说的,这里设置焦点
et.isFocusable = true et.isFocusableInTouchMode = true et.requestFocus()
会发现焦点是有了,但焦点总是会出现在最后一个,这肯定不符合需求啊且点击其他的也会出现点击两次才弹出软键盘问题,经过一番测试之后,发现另一个方法,就监听,在写个弹出软键盘的 方法
et.setOnTouchListener { v, event ->
if (event.action == MotionEvent.ACTION_CANCEL || MotionEvent.ACTION_UP == event.action) {
ShowSoftInputUtils.showKeyboard(v)
et.setSelection(et.text.length)
v.requestFocus()
v.isFocusableInTouchMode = true
v.isFocusable = true
chuangjianShareCreatMobanBean?.resources?.forEach {
if (it.type == v.id.toString()) {
ids = it.id.toString()
}
}
}
true
}
fun showKeyboard(view: View?) {
val imm = view?.context
?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
view.requestFocus()
imm.showSoftInput(view, 0)
}
fun hideKeyboard(view: View) {
val imm = view.context
.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
}
里面有个id就是之前说的,会根据id来判断是点击 的是那个edittext,到此结束,,这里基本会差不多了。