【Android】アクティビティでナビゲーションバーを完全に非表示にする方法
本記事では、Androidアプリのアクティビティでナビゲーションバー(画面下部の戻る・ホーム・最近使ったアプリの各ボタンが並ぶ領域)を完全に非表示にする方法を解説します。ゲームや動画再生アプリなど、没入感のある全画面UIを実装したい場合に役立つテクニックです。
手順1:Android Studioで新規プロジェクトを作成
Android Studioを起動し、メニューから「File」→「New Project」を選択して新しいプロジェクトを作成します。必要事項を入力して、プロジェクトのセットアップを完了させましょう。
手順2:レイアウトファイル(activity_main.xml)の作成
res/layout/activity_main.xml を以下のように記述します。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
手順3:MainActivity.javaに没入モードの処理を追加
続いて、src/MainActivity.java に以下のコードを記述します。ここが今回の実装の核心部分です。
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
private int currentApiVersion;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
currentApiVersion = android.os.Build.VERSION.SDK_INT;
final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
if (currentApiVersion >= Build.VERSION_CODES.KITKAT) {
getWindow().getDecorView().setSystemUiVisibility(flags);
final View decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
decorView.setSystemUiVisibility(flags);
}
}
});
}
}
@SuppressLint("NewApi")
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (currentApiVersion >= Build.VERSION_CODES.KITKAT && hasFocus) {
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
}
}
使用しているシステムUIフラグの意味
- SYSTEM_UI_FLAG_LAYOUT_STABLE … システムUIの表示・非表示に関わらず、コンテンツのレイアウト位置を一定に保ちます。
- SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION/LAYOUT_FULLSCREEN … バーが隠れてもコンテンツがリサイズされず、画面全体にレイアウトされるようにします。
- SYSTEM_UI_FLAG_HIDE_NAVIGATION … ナビゲーションバーを非表示にします。
- SYSTEM_UI_FLAG_FULLSCREEN … ステータスバーも非表示にして全画面表示にします。
- SYSTEM_UI_FLAG_IMMERSIVE_STICKY … 「スティッキー没入モード」を有効化します。ユーザーが画面端からスワイプするとバーが半透明で一時的に現れ、操作しなければ自動的に再び隠れます。
また、onWindowFocusChanged() 内でも同じフラグを再設定している点が重要です。ダイアログ表示後など、ウィンドウがフォーカスを取り戻したタイミングでシステムUIが復活してしまうのを防ぐためです。
手順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スマートフォンをPCに接続した状態で、Android Studioのツールバーにある「Run」アイコンをクリックします。デバイスを選択して実行すると、端末の画面にナビゲーションバーもステータスバーも表示されていない全画面状態でアプリが起動します。

補足:新しいバージョンのAndroidについて
上記の SYSTEM_UI_FLAG 系のフラグは、Android 11(API 30)以降では非推奨(deprecated)となっています。最新のOSのみを対象とする場合は、WindowInsetsController(互換ライブラリの WindowInsetsControllerCompat)を使う方法が公式に推奨されています。一方、KitKat以降の幅広い端末をサポートしたいケースでは、本記事で紹介した手法が今も有効です。目的に応じて使い分けてください。
-
【Android開発】ステータスバーを非表示にしてフルスクリーン表示する方法
Androidでステータスバーを非表示にする方法この記事では、Androidアプリでステータスバー(通知バー)を非表示にし、画面全体をフルスクリーン表示にする方法を解説します。ゲームや動画プレーヤーなど、没入感のあるUIを実装したい場面で役立つ定番テクニックです。ステップ1:新規プロジェクトを作成するまず、Android Studioで新しいプロジェクトを作成します。メニューから「File」⇒「New Project」を選択し、必要な設定項目をすべて入力してプロジェクトを生成しましょう。ステップ2:activity_main.xml を編集する次に、res/layout/activity_ma
-
AndroidでIPアドレスを非表示にする方法|VPN・Tor・プロキシの使い方を徹底解説
インターネットを語るうえで欠かせない用語の一つが「IPアドレス」です。名前は聞いたことがあっても、その仕組みまで詳しく理解する機会は意外と少ないもの。AndroidでIPアドレスを非表示にする前に、まずはIPアドレスの基本と仕組みを押さえておきましょう。 そもそもIPアドレスとは? 「IP」は「Internet Protocol(インターネットプロトコル)」の略で、ウェブ閲覧をはじめとするインターネット通信全体を支える一連の規則・プロトコルのことです。IPアドレスとは、ネットワークに接続された機器に割り当てられる固有の識別番号であり、これによってIPベースのネットワーク上で他の端末と通信でき