美文网首页Android开发经验谈Android开发宝典Android开发
EditText监听回车键并处理两次回调问题

EditText监听回车键并处理两次回调问题

作者: FynnJason | 来源:发表于2018-08-29 11:08 被阅读17次

    原创不易,转载请注明出处,谢谢了。

    前言

    我们都知道,在登面,搜索等等有EditText控件的界面上,当用户输入完内容后,点击回车键执行逻辑会有非常好的用户体验,所以今天我们来学习如何监听EditText监听回车键并处理监听时发生了两次回调问题。

    代码

    首先我们在xml布局中添加一个要监听的EditText

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <EditText
            android:id="@+id/et_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
    

    要想监听到软键盘按下什么键,就需要使用setOnKeyListener方法,在Activity中,我们编写监听代码

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
    
            EditText et = findViewById(R.id.et_text);
            et.setOnKeyListener(new View.OnKeyListener() {
                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    return false;
                }
            });
        }
    

    接下来在onKey方法中监听回车键

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
    
            EditText et = findViewById(R.id.et_text);
            et.setOnKeyListener(new View.OnKeyListener() {
                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    if (keyCode == KeyEvent.KEYCODE_ENTER){
                        Log.e("MainActivity", "onKey: 按下回车键");
                        return true;
                    }
                    return false;
                }
            });
        }
    

    我们运行起来,并在EditText中点击回车键,会看到如下日志

    E/MainActivity: onKey: 按下回车键
    E/MainActivity: onKey: 按下回车键
    

    为什么我们会看到两次日志输入呢?

    两次回调解答并解决

    我们都知道,当我们按某个键的时候,键盘有按下和抬起两个操作,所以这里两次回调就是回车按下时,回调一次,回车键抬起时,回调一次。

    要解决这个办法非常简单,我们只需要多加一个条件判断,是抬起还是按下即可

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
    
            EditText et = findViewById(R.id.et_text);
            et.setOnKeyListener(new View.OnKeyListener() {
                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
                        Log.e("MainActivity", "onKey: 按下回车键");
                        return true;
                    }
                    return false;
                }
            });
        }
    

    我们再运行看看,点击回车后,日志输出

    E/MainActivity: onKey: 按下回车键
    

    好了,这就是EditText监听回车键并处理两次回调,如果文章帮助到你,点个喜欢支持一下吧,谢谢。

    相关文章

      网友评论

        本文标题:EditText监听回车键并处理两次回调问题

        本文链接:https://www.haomeiwen.com/subject/gcyhwftx.html