You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:用户停止输入或点击完成后隐藏EditText的问题

解决EditText在输入完成后隐藏的问题

嘿,作为Android新手碰到这种问题太正常啦,我来帮你搞定!你的代码思路是对的,但报错大概率是因为当触发IME_ACTION_DONE时,event参数可能为null,这时候调用event.getAction()或者event.isShiftPressed()就会抛出空指针异常。

修正后的代码

我帮你调整了逻辑,先判断actionId,再处理event的情况,同时还加了隐藏软键盘的逻辑(不然EditText藏了键盘还留在界面上会很奇怪):

package com.example.android.monopolycredit;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.TextView;

public class LoginLobby extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login_lobby);
        
        final EditText usernameEditText = findViewById(R.id.usernameField);
        // 获取输入法管理器,用于隐藏软键盘
        final InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);

        usernameEditText.setOnEditorActionListener(
                new EditText.OnEditorActionListener() {
                    @Override
                    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                        // 先处理IME_ACTION_DONE/SEARCH这类软键盘按钮事件
                        boolean isDoneAction = actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_ACTION_SEARCH;
                        // 再处理回车按键事件(确保event不为null)
                        boolean isEnterKey = event != null && event.getAction() == KeyEvent.ACTION_DOWN 
                                             && event.getKeyCode() == KeyEvent.KEYCODE_ENTER 
                                             && !event.isShiftPressed();

                        if (isDoneAction || isEnterKey) {
                            // 隐藏EditText
                            usernameEditText.setVisibility(View.GONE);
                            // 隐藏软键盘
                            if (imm.isActive()) {
                                imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
                            }
                            return true; // 消耗事件,不再传递
                        }
                        return false; // 不处理,交给其他监听器
                    }
                });
    }
}

关键修正点说明

  • 空指针防护:判断event != null后再调用event的方法,避免崩溃
  • 拆分条件判断:把actionId和回车事件分开判断,逻辑更清晰
  • 添加软键盘隐藏:输入完成后隐藏键盘,提升用户体验

额外补充:如果要加一个外部「完成」按钮

如果你还想在界面上加一个独立的「完成」按钮(比如布局里有Button控件),可以这样加点击事件:

// 假设布局里有id为btn_done的按钮
Button doneBtn = findViewById(R.id.btn_done);
doneBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        usernameEditText.setVisibility(View.GONE);
        if (imm.isActive()) {
            imm.hideSoftInputFromWindow(usernameEditText.getWindowToken(), 0);
        }
    }
});

这样不管是点击软键盘的「完成」,还是按回车,或者点击界面上的「完成」按钮,都能实现隐藏EditText的效果啦~

内容的提问来源于stack exchange,提问作者jmecs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:46:09