Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

Android에서 홈 버튼 및 기타 시스템 내비게이션 버튼 비활성화하는 방법

이 튜토리얼에서는 Android 앱에서 홈 버튼을 포함한 시스템 내비게이션 버튼을 비활성화(숨기기)하는 방법을 단계별로 살펴봅니다. 키오스크 앱이나 전체 화면 모드가 필요한 앱을 개발할 때 유용하게 활용할 수 있습니다.

1단계 — 새 프로젝트 생성

Android Studio를 실행하고 File ⇒ New Project 메뉴로 이동한 뒤, 새 프로젝트를 만들기 위해 필요한 모든 세부 정보를 입력합니다.

2단계 — 레이아웃 파일 수정

아래 코드를 res/layout/activity_main.xml에 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".MainActivity">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Disable Home and Other System buttons"
        android:textAlignment="center"
        android:textSize="24sp"
        android:textStyle="bold" />
</RelativeLayout>

3단계 — MainActivity 코드 작성

아래 코드를 src/MainActivity.java에 추가합니다. 핵심은 onWindowFocusChanged() 콜백에서 시스템 UI 플래그를 설정하여 내비게이션 바와 상태바를 숨기는 것입니다.

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        hideNavigationBar();
    }
    private void hideNavigationBar() {
        final View decorView = this.getWindow().getDecorView();
        final int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
        Timer timer = new Timer();
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                MainActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        decorView.setSystemUiVisibility(uiOptions);
                    }
                });
            }
        };
        timer.scheduleAtFixedRate(task, 1, 2);
    }
}

코드 설명

  • SYSTEM_UI_FLAG_HIDE_NAVIGATION: 하단 내비게이션 바(홈, 뒤로 가기, 최근 앱 버튼)를 숨깁니다.
  • SYSTEM_UI_FLAG_FULLSCREEN: 상태바까지 함께 숨겨 완전한 전체 화면을 구현합니다.
  • LAYOUT 관련 플래그: UI 요소가 숨겨질 때 레이아웃이 밀리지 않도록 안정적으로 유지합니다.
  • Timer: 사용자가 화면을 터치해 내비게이션 바가 다시 나타나더라도 즉시 다시 숨기도록 주기적으로 플래그를 재설정합니다.

4단계 — AndroidManifest.xml 확인

아래 코드를 androidManifest.xml에 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

앱 실행 및 결과 확인

이제 애플리케이션을 실행해 보겠습니다. 실제 Android 기기를 컴퓨터에 연결했다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의 Run 아이콘을 클릭하세요. 실행 옵션에서 연결된 모바일 기기를 선택하면, 기기 화면에 아래와 같이 시스템 버튼 없이 전체 화면으로 앱이 표시됩니다.

Android에서 홈 버튼 및 기타 시스템 내비게이션 버튼 비활성화하는 방법

참고 사항

setSystemUiVisibility()와 관련 시스템 UI 플래그는 API 30(Android 11)부터 공식적으로 지원 중단(deprecated)되었습니다. 최신 Android 버전을 대상으로 개발한다면 WindowInsetsController(또는 AndroidX의 WindowInsetsControllerCompat)를 사용하는 것이 좋습니다. 다만 위 방식은 여전히 구버전 기기에서 널리 사용되며, 키오스크·전자책 리더 등 몰입형 앱을 만드는 데 참고가 됩니다.