[Android] アプリのタイトルバーを非表示、全画面表示にする

アプリによってはフルスクリーン、全画面表示が好まれるものがあります。ゲームやギャラリーアプリなどです。ただ全画面にしてしまうと、ナビができなくなりユーザーが困ることに。それについては幾つかのオプションが提示されています。
 
fullscreen 06b - [Android] アプリのタイトルバーを非表示、全画面表示にする

Android Studio 3.5.3
API 29

 



全画面

 
コードでのfullscreenにはAPIが19以上という制約がありますが、API19未満のシェアは相当少なくなってきています。そろそろ古い機種の事は考え無くてもいいかな…
 
例えば、この画像をフルスクリーンで表示したいとすると
 
girl tomoka 169x300 - [Android] アプリのタイトルバーを非表示、全画面表示にする
 
これを普通に表示させるとこうなります
 
fullscreen 02 - [Android] アプリのタイトルバーを非表示、全画面表示にする
 
フルスクリーンにするには3種類のバーを非表示にする必要があります。

  • ステータスバー
  • タイトルバー
  • ナビゲーションバー

それぞれのバーについは以下を参照してください
 

screensize 00 100x100 - [Android] アプリのタイトルバーを非表示、全画面表示にする
アプリの画面サイズを取得したい事が時々あります。タブレットとスマホで表示を変えたい。あるいはテキストの位置を正確に表示したいなど。画面のサイ...

 
Enable fullscreen mode | Android Developers によると幾つかのアプローチがあると言っていますので、それぞれ試してみます。
 

 

観賞モード

 
Lean backと言われている観賞モードです。ユーザーが画面を頻繁に操作しない例えば動画などでの全画面表示です。

setSystemUiVisibility() から status bar と navigation bar の設定で非表示にできます。

  • SYSTEM_UI_FLAG_FULLSCREEN
    • status barを非表示
  • SYSTEM_UI_FLAG_HIDE_NAVIGATION
    • navigation barを非表示

また、全画面から戻ったり終了させるためには、画面をタップして戻ることが可能です。
 
このシステムバーの表示、非表示はリスナーを使ってステータスを知ることができます。
setOnSystemUiVisibilityChangeListener
 
なお、タイトルバーはここでは外しておくためにMainActivityの継承はAppCompatActivityではなくActivityとしておきます。(AppCompatActivityは全画面表示モードで使います)
 
MainActivity.java

 
レイアウトです。画像を画面いっぱいにするために centerCrop でLinearLayoutを使っています、がなくても確認できます。
activity_main.xml

 
fullscreen 03 - [Android] アプリのタイトルバーを非表示、全画面表示にする
 
起動時はフルスクリーンとなっており、”The system bars are NOT visible”のログが見て取れます。
画面タップで”The system bars are visible”とログが代わり、ステータスバーとナビゲーションバーが現れます。

fullscreen 04 - [Android] アプリのタイトルバーを非表示、全画面表示にする

Pixel 3 XL の切り欠きがどうなるのかと疑問でしたが、status bar には切り欠きがあるので物理的になくせないのでbar全体を黒くしたということのようです。
iOSではSafeAreaができて面倒なスペース管理と推奨表示に合わせる必要があるのに比べて、Androidは相変わらず緩いですね
 

没入モード

 
ゲームに没頭している(immersive)時に使うモードです。

setSystemUiVisibility()を呼び出して設定します。

  • SYSTEM_UI_FLAG_IMMERSIVE
  • SYSTEM_UI_FLAG_FULLSCREEN
  • SYSTEM_UI_FLAG_HIDE_NAVIGATION

画面を内側にスワイプすダウンするとフルスクリーンが解除されます。

MainActivity.java

 

アプリ優先型没入モード

 
immersiveは、ゲームなどで頻繁に画面をスワイプするような場合などでシステムバー(ステータスバーやナビゲーションバー)が出てくると煩わしくなります。これを軽減するためにSYSTEM_UI_FLAG_IMMERSIVE_STICKYを使うことができるSticky immersive modeです。
 
完全にはシステムバーにならない半透明な状態で何もしなければ数秒で元に戻ります。

  • SYSTEM_UI_FLAG_IMMERSIVE_STICKY
  • SYSTEM_UI_FLAG_FULLSCREEN
  • SYSTEM_UI_FLAG_HIDE_NAVIGATION

MainActivity.java

 
fullscreen 05 - [Android] アプリのタイトルバーを非表示、全画面表示にする

 

全画面モード

 
ActivityではなくAppCompatActivityを使いたい場合もあります。SYSTEM_UI_FLAG_LAYOUT_STABLE
を使うとタイトルバーを消せるのですが、これだけだと問題があります。
 
fullscreen 02 - [Android] アプリのタイトルバーを非表示、全画面表示にする
 
画面の status bar, navigation bar にスペースができてしまいます。これを解消するには
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
これらはあたかもシステムバーが非表示であるかのようにビューをレイアウトしてくれるというものです。
この場合この3つにより、画像がシステムバーの表示・非表示に関係なく一定のサイズになるようにしてくれるということです。

  • SYSTEM_UI_FLAG_IMMERSIVE_STICKY
  • SYSTEM_UI_FLAG_FULLSCREEN
  • SYSTEM_UI_FLAG_HIDE_NAVIGATION
  • SYSTEM_UI_FLAG_LAYOUT_STABLE
  • SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
  • SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

また、Dialog や Pop up メニューなどによってこれらが阻害されないように、onWindowFocusChanged(hasFocus: Boolean)を使ってシステムバーの非表示を遅らせることが必要な場合もあります。
これらをまとめると、
MainActivity.java

 
これでフルスクリーン表示ができました。
 
fullscreen 06b - [Android] アプリのタイトルバーを非表示、全画面表示にする
 
References:
Enable fullscreen mode | Android Developers
Control the system UI visibility | Android Developers

誤字脱字、意味不明で分からにゃイ、
などのご意見はこちらから mailフォーム

ブックマークしておくと便利です このエントリーをはてなブックマークに追加

 

アプリ開発が上達するお勧め

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンラインのプログラミングスクールがいいでしょう。

オンラインスクールは色々ありますが、以下の3つはAndroidが学習できる老舗スクールです。


TECH ACADEMY
Androidアプリコース


こういうものではアプリ作れないと言う意見もありますが、それは結局本人のやる気があるかないかです。やる気があっても独学では突破しにくいところは教えてもらうのが一番早い。


侍エンジニア塾
侍エンジニア塾 無料体験レッスン


とても簡単なことなのに本やネットの画像だけでは分かりにくいことはあります。実際に質問してピンポイントで教えてもらうと、なんだそんなこと、と言うのがけっこうあります。


CodeCamp
~約8,000名の受講生と80社以上の導入実績~
現役エンジニアのオンライン家庭教師CodeCamp




直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。




シェアする

  • このエントリーをはてなブックマークに追加

フォローする