【Kotlin】Androidアクティビティでナビゲーションバーを恒久的に非表示にする方法
この記事では、Kotlinを使用してAndroidアクティビティ内のナビゲーションバー(システムバー)を恒久的に非表示にする方法を解説します。「没入型(イマーシブ)スティッキーモード」を活用することで、ナビゲーションバーとステータスバーの両方を隠した全画面表示を実現できます。
手順1:新規プロジェクトを作成する
Android Studioを起動し、メニューからFile → New Projectを選択します。必要な項目をすべて入力して、新しいプロジェクトを作成してください。
手順2:レイアウトファイル(activity_main.xml)を編集する
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"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="70dp"
android:background="#008080"
android:padding="5dp"
android:text="TutorialsPoint"
android:textColor="#fff"
android:textSize="24sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Hello World!"
android:textColor="@android:color/holo_blue_dark"
android:textSize="24sp"
android:textStyle="bold" />
</RelativeLayout>手順3:MainActivity.kt を実装する
src/MainActivity.kt に以下のコードを記述します。
import android.os.Build
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
@Suppress("DEPRECATED_IDENTITY_EQUALS", "DEPRECATION")
class MainActivity : AppCompatActivity() {
private var currentApiVersion: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
currentApiVersion = Build.VERSION.SDK_INT
val flags: Int = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
if (currentApiVersion >= Build.VERSION_CODES.KITKAT) {
window.decorView.systemUiVisibility = flags
val decorView: View = window.decorView
decorView.setOnSystemUiVisibilityChangeListener { visibility ->
if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN === 0) {
decorView.systemUiVisibility = flags
}
}
}
}
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (currentApiVersion >= Build.VERSION_CODES.KITKAT && hasFocus) {
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
}
}
}コードのポイント
- SYSTEM_UI_FLAG_IMMERSIVE_STICKY:画面をスワイプしてもシステムバーが一時的に表示されるだけで、自動的に再び非表示になります。通常のイマーシブモードと異なり、フラグがクリアされません。
- setOnSystemUiVisibilityChangeListener:システムバーの表示状態が変化したことを検知し、即座にフラグを再適用します。
- onWindowFocusChanged:ダイアログ表示などでフォーカスが戻ったタイミングでも全画面状態を維持するために、フラグを再設定しています。
なお、systemUiVisibilityはAPI 30(Android 11)以降で非推奨となっています。最新の環境では WindowInsetsController(またはAndroidXの WindowCompat.getInsetsController())と BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE を使う方法が推奨されるため、新しいプロジェクトではこちらの利用も検討してください。
手順4:AndroidManifest.xml を編集する
androidManifest.xml に以下のコードを追加します。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.q11">
<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】アクティビティでナビゲーションバーを完全に非表示にする方法
本記事では、Androidアプリのアクティビティでナビゲーションバー(画面下部の戻る・ホーム・最近使ったアプリの各ボタンが並ぶ領域)を完全に非表示にする方法を解説します。ゲームや動画再生アプリなど、没入感のある全画面UIを実装したい場合に役立つテクニックです。 手順1:Android Studioで新規プロジェクトを作成 Android Studioを起動し、メニューから「File」→「New Project」を選択して新しいプロジェクトを作成します。必要事項を入力して、プロジェクトのセットアップを完了させましょう。 手順2:レイアウトファイル(activity_main.xml)の作成 re
-
【Kotlin入門】AndroidでImageViewのマージンをコードから動的に設定する方法
このチュートリアルでは、Kotlinを使用してAndroidアプリのImageViewにマージン(外側の余白)をプログラム的に設定する方法を、ステップごとにわかりやすく解説します。レイアウトXMLだけでなく、コードから動的に余白を変更したい場合に役立つテクニックです。ステップ1:新規プロジェクトの作成Android Studioを起動し、「File」→「New Project」を選択して新しいプロジェクトを作成します。必要な項目(プロジェクト名、パッケージ名、保存先など)をすべて入力してください。言語は「Kotlin」を選択します。ステップ2:レイアウトファイルの編集res/layout/ac