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

Android Studio 如何为单个Activity禁用返回、主页、菜单全部系统按键(适配Android7+)

适配Android 7及以上的单个Activity系统按键禁用方案

以下方案仅作用于目标Activity,离开页面后系统按键功能会自动恢复,兼容Android 7到最新Android 14版本。

1. 禁用返回键

直接重写目标Activity的onBackPressed方法,空实现即可拦截返回事件:

// Java 实现
@Override
public void onBackPressed() {
    // 不需要调用父类方法,空实现即拦截返回键
}
// Kotlin 实现
override fun onBackPressed() {
    // 空实现拦截返回键
}

2. 禁用HOME键、菜单键

Android 7开始系统限制了直接拦截这两个按键的权限,需要通过悬浮窗配置+事件拦截组合实现:

第一步:添加权限

在AndroidManifest.xml中添加悬浮窗权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

第二步:配置Activity Window属性

在目标Activity的onCreate方法setContentView之前调用如下配置:

// Java 实现
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Window window = getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
    window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    WindowManager.LayoutParams layoutParams = window.getAttributes();
    layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
    layoutParams.flags = WindowManager.LayoutParams.FLAG_FULLSCREEN 
            | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
            | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
    window.setAttributes(layoutParams);
    setContentView(R.layout.your_activity_layout);
}

第三步:拦截按键事件

重写onKeyDown方法消费HOME、菜单键事件:

// Java 实现
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_HOME:
        case KeyEvent.KEYCODE_MENU:
        case KeyEvent.KEYCODE_BACK:
            // 返回true表示已消费事件,不会传递给系统处理
            return true;
        default:
            return super.onKeyDown(keyCode, event);
    }
}

3. 页面销毁时恢复配置

在onDestroy方法清除特殊标记,避免影响其他页面功能:

// Java 实现
@Override
protected void onDestroy() {
    super.onDestroy();
    Window window = getWindow();
    window.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
    window.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}

注意事项

  • 首次进入该Activity前需要通过Settings.canDrawOverlays(context)判断是否已获取悬浮窗权限,未授权时引导用户开启权限即可。
  • 该方案不会影响应用内其他Activity的系统按键功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:09:00