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

调用hideKeyboard隐藏软键盘时屏幕变暗的问题及解决咨询

问题排查与解决方案

你遇到的屏幕变暗问题,大概率是当前页面的焦点丢失或窗口属性变化导致的,和你使用的hideKeyboard()函数本身无关,其他页面正常说明是当前页面的特有逻辑影响,以下是具体排查和解决方法:

1. 隐藏键盘后补充焦点,避免页面失焦

当你隐藏软键盘时,原本获取焦点的EditText会失去焦点,如果页面没有其他可获取焦点的View,部分设备的省电机制会认为页面处于“非活跃”状态,进而触发亮度降低。解决方法是隐藏键盘后手动给根布局设置焦点:

修改hideKeyboard()函数:

fun Activity.hideKeyboard() {
    currentFocus?.let { focusedView ->
        val inputMethodManager = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
        inputMethodManager.hideSoftInputFromWindow(focusedView.windowToken, 0)
        // 给页面根布局设置焦点,防止页面失焦
        window.decorView.rootView.requestFocus()
    }
}

或者在回车监听中补充焦点:

如果你不想修改全局函数,也可以在EditText的回车触发代码里添加:

editText.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        hideKeyboard()
        // 定位到页面根布局并设置焦点
        findViewById<View>(android.R.id.content).requestFocus()
        true
    }
    false
}

2. 检查屏幕常亮设置

如果当前页面原本依赖EditText的焦点来保持屏幕常亮(比如通过FLAG_KEEP_SCREEN_ON),当EditText失去焦点后,常亮标记被移除,就会触发系统自动调暗屏幕。可以直接给页面根布局添加常亮属性,保证全程屏幕亮度正常:

在布局文件的根View中添加:

android:keepScreenOn="true"

或者在Activity代码中设置:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.your_activity_layout)
    // 强制保持屏幕常亮
    window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}

3. 排查自定义亮度调节逻辑

检查当前页面是否有针对EditText焦点变化的自定义代码,比如在onFocusChanged监听里设置了屏幕亮度:

// 类似这样的代码会导致焦点丢失时变暗
editText.setOnFocusChangeListener { _, hasFocus ->
    val layoutParams = window.attributes
    layoutParams.screenBrightness = if (hasFocus) 1.0f else 0.5f
    window.attributes = layoutParams
}

如果有这类代码,要么删除,要么调整触发条件,避免在隐藏键盘时触发亮度降低。

4. 排除系统省电机制影响

如果以上方法都无效,可以临时关闭设备的自动亮度调节和省电模式测试,确认是否是系统级别的省电策略导致,但因为其他页面正常,这个概率较低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:30:57