2026-10-13 核查:这个方法适用于传统 Android View 布局,所用焦点属性从 API 1 起可用,仍然有效。但输入焦点和软键盘可见性是两个状态,不能保证加上两个属性后键盘在所有场景都不弹出。
Android中,使用EditText作为输入框很方便,但是有时候EditText会自动获取焦点,其行为:点击进入这个页面后,EditText自动获取焦点,导致软键盘直接跳出.有时候这么做很方便,但是大部分时候我们还是希望在点击EditText的时候,软键盘才弹出来.
在 EditText 的父布局上设置下面的属性,让容器能够接收触摸模式下的输入焦点,并在焦点查找时优先于子 View:
1 | android:focusable="true" |
这些是写在父布局起始标签内的属性片段。容器先获得初始焦点后,EditText 就不会因为成为默认焦点而触发输入;用户仍然可以点击 EditText 开始编辑。具体优先级由 ViewGroup 的焦点规则控制。如果布局里有 <requestFocus />、代码调用 requestFocus(),或页面恢复了之前的焦点,还需要检查这些来源,不能只依赖父布局属性。
如果只希望首次进入 Activity 时隐藏键盘,但仍保留 EditText 的焦点,可以在已有 Activity 声明中设置这个属性:
1 | android:windowSoftInputMode="stateHidden" |
stateHidden 表示用户向前导航到 Activity 时的键盘初始状态,不会禁止之后主动显示键盘。它与返回到旧页面、窗口焦点恢复时的行为也不完全相同,具体见 windowSoftInputMode。焦点控制和键盘显示要按实际目标分别处理。
关于我 && 博客
下面是个人的介绍和相关的链接,期望与同行的各位多多交流,三人行,则必有我师!
- 博主个人介绍 :里面有个人的微信和微信群链接。
- 本博客内容导航 :个人博客内容的一个导航。
- 个人整理和搜集的优秀博客文章 - Android 性能优化必知必会 :欢迎大家自荐和推荐 (微信私聊即可)
- Android性能优化知识星球:付费社群已于 2026 年停止运营,不再招收新成员;此处保留历史介绍。
一个人可以走的更快 , 一群人可以走的更远
