当前位置: 代码迷 >> 综合 >> Android 动态创建edittext焦点问题
  详细解决方案

Android 动态创建edittext焦点问题

热度:96   发布时间:2023-10-19 06:17:28.0

最近在创建动态布局的时候遇到的一些问题总结一下:

因为这里不是创建一个edittext而是多个edittext;先贴上代码:

val linearLayout = LinearLayout(getApplication())lp.setMargins(10, 15, 0, 5)linearLayout.layoutParams = lplinearLayout.orientation = LinearLayout.HORIZONTALval tv = TextView(getApplication())tv.setTextColor(ContextCompat.getColor(getApplication(), R.color.c_888888))tv.layoutParams = tvpval et = EditText(getApplication())et.layoutParams = lp2et.setPadding(15, 8, 15, 8)et.background = ContextCompat.getDrawable(getApplication(), R.drawable.shape_corner_3_f5f5f5)tv.text = set.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 = truev.isFocusable = truechuangjianShareCreatMobanBean?.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 InputMethodManagerview.requestFocus()imm.showSoftInput(view, 0)}fun hideKeyboard(view: View) {val imm = view.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManagerimm.hideSoftInputFromWindow(view.windowToken, 0)}

里面有个id就是之前说的,会根据id来判断是点击 的是那个edittext,到此结束,,这里基本会差不多了。

  相关解决方案