Android EditText 获取/失去焦点

这篇具有很好参考价值的文章主要介绍了Android EditText 获取/失去焦点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目的需求中,又一个4位数的验证码界面,小弟才疏学浅,只想到了用线性布局里面放四个EditText

需求需要输入内容后,自动跳到下一个位置聚焦,删除指定位置后,自动跳到上一个位置聚焦,由于聚焦/非聚焦UI展示得都不同,所以每个editText都会频繁的设置焦点变化。

之前因为是调用的系统键盘,所以,editText和键盘绑定后处理起来非常方便,但是,我们需要自定义一个展示在UI上的数字键盘,于是就有些bug。

bug不难,但是有点杂乱,下面是我的一点解决办法,总结一下,以后也记得更清楚!

1、首先是实现输入内容后,自动跳到下一个位置聚焦:

实现方式:TextWatcher监听内容输入后,设置此位置失去焦点,下个位置获取焦点(由此控制UI变化)

var textWatcher: TextWatcher = object : TextWatcher {
        override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
        override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
        override fun afterTextChanged(s: Editable) {
            if (!s.toString().isEmpty() && currentPosition < editTextList.size() - 1) {
                editTextList.get(currentPosition).setFocusable(false)
                //下个位置自动聚焦
                currentPosition++
                editTextList.get(currentPosition).setFocusable(true)
                editTextList.get(currentPosition).setFocusableInTouchMode(true)
                editTextList.get(currentPosition).requestFocus()
                editTextList.get(currentPosition).findFocus()
            }
        }
    }

tips:之前我只调用了requestFocus(),但是有概率会失败,因为我会在操作的过程中调用setFocusable(false),所以,稳妥的办法就是:

editTextList.get(currentPosition).setFocusable(true);//设置输入框可聚焦
editTextList.get(currentPosition).setFocusableInTouchMode(true);//设置触摸聚焦
editTextList.get(currentPosition).requestFocus();//请求聚焦
editTextList.get(currentPosition).findFocus();//获取焦点

2.删除内容后,设置为失去焦点,跳到有内容的位置,得到焦点

fun deleteContent() {
        editTextList.get(currentPosition).setText("")
        if (currentPosition > 0) {
            editTextList.get(currentPosition).setFocusable(false)
            editTextList.get(currentPosition)
                .setBackground(ContextCompat.getDrawable(context, R.drawable.rgb_282730_r12))
            //跳到前一个不为空的EditText
            for (position in currentPosition downTo 0) {
                currentPosition = position
                if (!editTextList.get(position).getText().toString().isEmpty()) {
                    isDelete = true
                    editTextList.get(currentPosition).setBackground(
                        ContextCompat.getDrawable(
                            context,
                            R.drawable.rgb272830_stroke_r12
                        )
                    )
                    editTextList.get(currentPosition).setFocusable(true)
                    editTextList.get(currentPosition).setFocusableInTouchMode(true)
                    editTextList.get(currentPosition).requestFocus()
                    editTextList.get(currentPosition).findFocus()
                    break
                }
            }
        }
    }

 3.这是焦点监听:为editText列表根据isFocused设置背景

var onFocusChangeListener =
        OnFocusChangeListener { v: View?, hasFocus: Boolean ->
            for (i in editTextList.indices) {
                if (editTextList.get(i).isFocused()) { 
                    currentPosition = ieditTextList.get(i).setBackground()
                } else { editTextList.get(i).setBackground() }
            }
        }

tips:

1. edittext禁止调出软键盘(之前用editText.setFocusable(false);这方法来实现点击跳转,但是这次需要输入内容,不准跳出键盘,所以用下面这个方法)
editText.setInputType(InputType.TYPE_NULL);来禁止手机软键盘。 (xml中设置inputType为none无效)

2.editText.setInputType(InputType.TYPE_CLASS_TEXT);来开启软键盘。文章来源地址https://www.toymoban.com/news/detail-436483.html

到了这里,关于Android EditText 获取/失去焦点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android开发——控件EditText, 2.获取EditText输入的数据,通过按钮点击实现,ImageView控件,缩放类型,控件ProgressBar,常用属性详解,进度条设置

    1. android : hint 输入提示 2. android : textColorHint  输入提示文字的颜色 3. android : inputType  输入类型 4. android : drawableXxxx 在输入框的指定方位添加图片 5. android : drawablePadding  设置图片与输入内容的间距 6. android : paddingxxxx  设置内容与边框的间距 7. android : backgrou

    2024年02月07日
    浏览(49)
  • el-input-number 失去焦点blur事件,

            最近遇到了个奇怪的需求,需要代码手动给数字输入框手动触发失焦事件;但是在看了 el-input-number 焦点事件部分的源码后,发现 el-input-number 只有获取焦点focus事件,却没有失去焦点的事件: 后来再阅读了 el-input-number的 template部分的源码后;发现el-input-number封装

    2024年02月13日
    浏览(43)
  • Flutter 点击输入框之外的地方时,输入框失去焦点

    点击输入框时,输入框可以获取焦点,点击输入框之外的地方时,输入框失去焦点。 1. 初始化focusNode,FocusNode focusNode = FocusNode() 2. 给输入框TextField设置focusNode 3. 在onTapOutside事件中调用focusNode.unfocus() 4. 组件销毁前释放focusNode,focusNode.dispose() 注意:如果Flutter SDK的版本太低的

    2024年02月15日
    浏览(41)
  • TextBox添加鼠标按下、失去焦点、鼠标移动等事件及重写

    TextBox添加鼠标按下、失去焦点、鼠标移动等事件及重写 方法1: 方法2:    

    2024年02月15日
    浏览(40)
  • Element UI表格内容双击可编辑,失去焦点提交内容

    需求就是双击列表中的某一cell,获取焦点时单元格变成input编辑框,失去焦点时如果内容有更改就触发修改的接口,如果内容无更改的话,就不触发。 1.首先给列表绑定双击事件 2.给单元格绑定 className 的回调方法,目的是获取选中单元格的行和列的index 相关代码如下: 视图

    2024年02月04日
    浏览(39)
  • 实测Android音频的焦点获取和归还

    最近老板想在产品中的短视频后者直播播放的时候对于手机中的音乐播放器进行暂停播放,并且退出视频播放后手机的音乐播放器还能继续播放之前的音乐。 先试试微信,emmm,确实可以。 Android官网:管理音频焦点 在即将开始播放之前调用 requestAudioFocus() ,并验证调用是否

    2023年04月09日
    浏览(50)
  • 完美解决element-ui-plus按钮点击后不会自动失去焦点

    最近新项目采用了Vue3+element-ui-plus,发现按钮点击后,都不会失去焦点,看着很不舒服,结合网上的解决方法,自己优化了下,采用指令方式,感觉很方便: 1 建立btn指令 2 main.js中注册 3 在按钮中使用指令 然后就搞定了,是不是很方便~

    2024年02月11日
    浏览(47)
  • H5: div与textarea输入框的交互(聚焦、失去焦点、键盘收起)

    本文是基于 VUE3+TS 的代码说明。 记录自己遇到的 div 与 textarea 输入框交互的聚焦、失去焦点、键盘收起、表情插入不失去焦点的需求实现。 1.固定在页面底部; 2.默认显示纯文字与发送图标按钮,文字超出的省略显示; 3.点击文字后,显示文本输入框、表情、半透明遮罩层,

    2024年02月12日
    浏览(48)
  • 解决elementUI或elementPlus的按钮点击后需要失去焦点才能恢复原本样式问题

    废话不多说直接上代码,只需要在button中添加如下代码即可

    2024年01月22日
    浏览(48)
  • ElementUI table表格组件实现双击编辑单元格失去焦点还原,支持多单元格

    在使用ElementUI table表格组件时有时需要双击单元格显示编辑状态,失去焦点时还原表格显示。 实现思路: 在数据中增加 isFocus:false .控制是否显示 在table中用 @cell-dblclick 双击方法 先看效果: 上源码:在表格模板中用scope.row.isFocus focusLabelName==\\\'姓名1控制多个单元格显示 方法:

    2024年02月21日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包