You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android如何显示软键盘且隐藏全屏输入框并接收输入?

解决Android软键盘弹出时的全屏输入框遮挡问题

我之前也碰到过一模一样的麻烦:能正常控制软键盘的开关,也能往TextView里输入文本,但键盘上方那个占满屏幕的文本输入框实在头疼——它会把我要展示的UI内容全挡住。一开始我试着给TextView设置InputType.TYPE_NULL,确实把输入框藏起来了,但悲剧的是连键盘输入也接收不到了:

// 不显示软键盘上方的文本输入框,但也无法接收输入
tview.setInputType(InputType.TYPE_NULL);

折腾了好久才发现核心突破口:根本不需要依赖TextView来接收软键盘输入,任何View的子类都能直接处理键盘的按键事件,这样就能彻底避开那个烦人的全屏输入框。

具体实现方式是重写View的onCreateInputConnection方法,通过配置EditorInfo的标志来隐藏输入框,同时建立有效的输入连接:

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
    BaseInputConnection b = new BaseInputConnection(this, false);
    outAttrs.actionLabel = null;
    outAttrs.inputType = InputType.TYPE_NULL;
    outAttrs.imeOptions = EditorInfo.IME_FLAG_FORCE_ASCII | 
                          EditorInfo.IME_FLAG_NO_FULLSCREEN | 
                          EditorInfo.IME_FLAG_NO_EXTRACT_UI;
    return b;
}

这里的IME_FLAG_NO_FULLSCREENIME_FLAG_NO_EXTRACT_UI两个标志就是关键,它们能直接隐藏软键盘附带的文本编辑框,再也不会遮挡屏幕内容。

完成这一步后,你的主视图就可以通过重写onKey方法来接收软键盘的按键事件了:

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
    // 在这里编写你的按键输入处理逻辑
    return super.onKey(v, keyCode, event);
}

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

火山引擎 最新活动