이 튜토리얼에서는 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 아이콘을 클릭하세요. 실행 옵션에서 연결된 모바일 기기를 선택하면, 기기 화면에 아래와 같이 시스템 버튼 없이 전체 화면으로 앱이 표시됩니다.

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