← 返回文章列表

Termux 一弹键盘,屏幕底下就空出三成黑

Android 17 上 Termux 一唤出键盘,下方就空出一条占屏三成的黑带。查下来不是输入法的问题,是两个全屏开关在新系统上失效了。

手机连着蓝牙键盘那阵子,Termux 用得顺,后来蓝牙键盘丢了,只能靠屏幕上的软键盘敲命令。也就是从那天起,出了个怪事。

点一下输入框,键盘弹起来,然后屏幕下半截空出一大块黑。

不是键盘挡住内容,也不是终端没重绘——是我盯着那块黑看了半分钟才确认:终端文本好好地待在上半部分,按键行(ESC/TAB/CTRL 那一排)在中间,键盘在最底下,中间夹着一条纯黑、没文字、没分隔线、也没光标呼吸的空带。

我截了图,让视觉模型去量像素,回来说那块黑占屏幕高度约百分之三十五,上下边界在 850 到 900 像素之间。不是肉眼估的,是量出来的。

手机屏幕上终端与键盘之间空出一条黑带
键盘弹起来,终端和按键行之间就多出这么一条黑带

先排除掉最容易怀疑的那个

第一反应是输入法的问题。搜狗、讯飞这类输入法都有"键盘高度""悬浮键盘"之类的设置,很容易往那儿想。

但把输入法的高度调到最小,黑带纹丝不动;换一个输入法,还是那么宽。说明这块黑跟键盘本身多高没关系。

Termux 这边也没有"输入法高度"这种设置项。能在它身上动的只有 ~/.termux/termux.properties 这个文件,里面跟显示有关的就两个开关:

fullscreen=true
use-fullscreen-workaround=true

第一条是全屏模式——顶部状态栏不显示,终端铺满整个屏幕。第二条是给旧系统打的补丁,名字都写着 workaround,意思是某些安卓版本算键盘弹起的高度算得不对,用这个绕一下。

而 Android 15 开始,系统强制 edge-to-edge,也就是内容默认延伸到状态栏和导航栏底下。屏幕各处该扣多少 inset(安全边距),本来交给自己算,现在系统要插手。Termux 在全屏模式下会自己算一遍"键盘高度 + 导航栏 + 状态栏"的偏移量,系统又替它扣了一次,同一个量被扣了两遍,整块界面就被多顶上去一大截。

顶上去了多少,底下就空出来多少。那块黑就是终端视图没覆盖到的区域,它不画东西,因为它以为自己在屏幕外面。

至于那个 workaround 补丁,它本来就是给算错的老系统打的补丁。系统这边已经改成新规则了,补丁还在按老规矩做事,等于帮倒忙。

手机、扳手与齿轮
问题不在键盘多高,在两个全屏开关把边距算错了

改两个开关,然后必须敲一句命令

配置改成这样:

fullscreen=false
use-fullscreen-workaround=false
use-black-ui=true
bell-character=ignore
extra-keys = [['ESC','TAB','CTRL','ALT','-','/'],['LEFT','UP','DOWN','RIGHT','PGUP','PGDN']]

两件事要说清楚。

一,改之前先备份了原文件,cp termux.properties termux.properties.bak-fullscreen,内容就是上面那两行全屏开关。这个动作花三秒,省下的可能是半小时。

二,光改文件不生效。Termux 的配置是启动时读的,改完必须执行:

termux-reload-settings

然后重开一次 Termux。我第一次只存了文件没敲这句,回头一看毫无变化,差点以为是改错了地方。

改完重启,黑带没了。键盘弹起时交给系统的 adjustResize 处理,界面自己缩,不再多顶。

代价是状态栏回来了

不全屏的代价很直接:顶部那条状态栏回来了,占掉一点高度,时间、电量、信号都在上面。

我认这个代价。以前全屏是为了多挤几行,现在黑带吃掉的是三成屏幕——为了省那一条状态栏,赔进去半屏,这账怎么算都不划算。

如果哪天非要全屏,可以按这个顺序试四个组合,一个个来,每次改完都要 termux-reload-settings 并且重启一次再判断:

  • 全屏关 + 补丁关:本次生效的那个
  • 全屏开 + 补丁关
  • 全屏关 + 补丁开
  • 全屏开 + 补丁开:旧默认值,在 Android 17 上就是出问题的那组

真要退回去

一条命令的事:

cp ~/.termux/termux.properties.bak-fullscreen ~/.termux/termux.properties
termux-reload-settings

备份文件别急着删。这类显示问题跟系统版本绑得很死,下次系统一升级,说不定又得换回来。

顺手说一下那排按键

同一个文件里还有额外按键行的配置,就是键盘上方那两排虚拟键:

extra-keys = [['ESC','TAB','CTRL','ALT','-','/'],['LEFT','UP','DOWN','RIGHT','PGUP','PGDN']]

第一行 ESC / TAB / CTRL / ALT / 减号 / 斜杠,第二行左右上下和上下翻页。外层的方括号是一整排,里面的方括号是一行,改完一样要 termux-reload-settings 或者重开会话才生效。

这套键在手机上敲命令是救命的——CTRL 是 shell 里所有快捷键的前提,方向键是不用长按屏幕挪光标的前提。真丢了它们,手机终端基本没法用。

下次再遇到

记几条给自己:先截图量那块黑占多少、在什么位置,别凭手感;然后看配置里那两个全屏开关的组合,别一开始就怀疑输入法;改完必须 reload 一次再判断,别看着没变就往下改第二处。

顺带一句,这毛病跟"终端显示不正常"是两回事,前者是视图没铺满,后者是字体或者字符宽度的问题,别混到一起去查。

▍ 本文由自建 Agent 调度内容流水线自动完成:写稿 → 模型 API 生图 → R2 图床 → 排版 → MCP 落站。 ▍ 配图由模型 API 生成、托管在对象存储上;内容仅供参考。