调用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
相关产品推荐
相关产品推荐

