Android自定义Launcher首次进入Activity需先点击屏幕按钮才响应问题
问题根因
该问题是你配置的沉浸式系统UI规则导致的:Android 4.4及以上版本的沉浸模式中,View.SYSTEM_UI_FLAG_HIDE_NAVIGATION标志的默认交互逻辑为,用户首次点击屏幕时,系统会优先消耗这次点击事件用于退出沉浸模式、恢复导航栏/状态栏,事件不会向下传递给应用控件,因此按钮点击无响应,首次点击被系统拦截后后续事件才会正常触发,这也是你跳转新页面后问题复现的原因——新页面重新设置了沉浸规则,首次点击会再次被系统拦截。
解决方案
不需要修改现有按钮布局和点击逻辑,调整沉浸模式配置即可解决:
- 方案1:添加粘性沉浸标志,让系统不会因为单次点击退出沉浸模式
替换你原来的uiOptions配置,补充对应的粘性和布局稳定标志:
同时在Activity中重写int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions);onWindowFocusChanged方法,避免切后台、跳转页面后沉浸规则失效:
所有存在该问题的Activity都做相同配置即可。@Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); } } - 方案2:如果你实际不需要隐藏系统导航栏,直接移除
SYSTEM_UI_FLAG_HIDE_NAVIGATION标志即可,问题会直接消失。
内容的提问来源于stack exchange,提问作者Dev Churaman
相关产品推荐
相关产品推荐

