Androidでのフルスクリーンアクティビティ?


回答:


1052

プログラムでそれを行うことができます:

public class ActivityName extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // remove title
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.main);
    }
}

または、あなたのAndroidManifest.xmlファイルからそれを行うことができます:

<activity android:name=".ActivityName"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>

編集:

AppCompatActivityを使用している場合は、新しいテーマを追加する必要があります

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

そしてそれを使用します。

<activity android:name=".ActivityName"
    android:label="@string/app_name"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen"/>

https://stackoverflow.com/a/25365193/1646479に感謝


65
マニフェストでのアクティビティのandroid:theme = "@ android:style / Theme.NoTitleBar.Fullscreen"属性だけで十分です。ありがとう:)
Praveen

19
アプリが他のテーマを使用している場合は、対応するテーマ名(例:白のテーマ)を使用します @android:style/Theme.Holo.Light.NoActionBar.Fullscreen
ankitjaininfo 2013

5
マニフェストでテーマを設定すると、起動時に黒い画面が表示されます。コードで設定することをお勧めします。
aurelien_lepage

4
ActionBarを使用していて、TitleBarが不要な場合は、行 `requestWindowFeature() 'を削除してください。そうしないと、NullPointerが発生します
X.X_Mass_Developer

3
を使用している場合はAppCompatActivityrequestWindowFeature前に置く必要がありますsuper.onCreate。そうしないと、あなたが取得します:android.util.AndroidRuntimeException: requestFeature() must be called before adding content
スラブ

128

KitKatで利用できるイマーシブフルスクリーンモードというテクニックがあります。 没入型フルスクリーンモードのデモ


5
アプリが初めて没入モードに入ると、「リマインダーの吹き出し」が表示されることに注意してください。これは一部のアクティビティでは問題ありませんが、たとえばスプラッシュスクリーンを実行している場合は問題ありません。
LarsH

スピナーを使用すると壊れる
ViVekH 2016年

ステータスバーではなく、下部のナビゲーションバーのみを非表示にします。できますか?
PvDev 2018

76

@android:style/Theme.NoTitleBar.Fullscreenすでに自分のテーマを使用しているために、テーマを使用したくない場合は、を使用できますandroid:windowFullscreen

AndroidManifest.xmlで:

<activity
  android:name=".ui.activity.MyActivity"
  android:theme="@style/MyTheme">
</activity>

styles.xml内:

<style name="MyTheme"  parent="your parent theme">
  <item name="android:windowNoTitle">true</item>
  <item name="android:windowFullscreen">true</item> 
</style>

親を親テーマとして追加
Saurabh Bhandari 2017年

<item name = "windowActionBar"> false </ item>も配置する必要があります
htafoya

52

のAndroidManifest.xmlファイル:

<activity
    android:name=".Launch"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > <!-- This line is important -->

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>  

またはJavaコードで:

protected void onCreate(Bundle savedInstanceState){
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}

2
JAVAでプログラムを使用してコードを追加する必要があります
Dr. aNdRO 2013年

2
requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow()。setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN、WindowManager.LayoutParams.FLAG_FULLSCREEN);
iNFInite PosSibiLitiEs 2013年

ステータスバーではなく、下部のナビゲーションバーのみを非表示にします。できますか?
PvDev 2018

32

AppCompatとActionBarActivityを使用している場合は、これを使用します

getSupportActionBar().hide();


これは上部のステータスバーを削除しません
Manohar Reddy

24

に注意してください

requestWindowFeature(Window.FEATURE_NO_TITLE);

アクションバーを次のように設定する方法を使用している場合:

getSupportActionBar().setHomeButtonEnabled(true);

nullポインタ例外が発生します。


理由は、サイズ変更コードが非表示にしようとしているアクションバーを調整しているためです。
アンディ14

22

のappcompatでこれを試してくださいstyle.xml。すべてのプラットフォームをサポートします。

<!-- Application theme. -->
<style name="AppTheme.FullScreen" parent="AppTheme">
    <item name="android:windowFullscreen">true</item>
</style>


<!-- Application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar" />

素敵で簡単なソリューション。初心者の場合は、このテーマをAndroidManifest.xmlのアクティビティタグまたはアプリケーションタグに追加します。android:theme = "@ style / AppTheme.FullScreen"
Leos Literak

1
ステータスバーではなく、下部のナビゲーションバーのみを非表示にします。できますか?
PvDev 2018

13

Android Studio(現在のバージョンは2.2.2)を使用すると、フルスクリーンアクティビティを簡単に追加できます。

手順を参照してください。

  1. Javaメインパッケージを右クリックし、[新規]を選択> [アクティビティ]を選択> [フルスクリーンアクティビティ]をクリックします。

第一歩

  1. アクティビティ(「アクティビティ名」、「レイアウト名」など)をカスタマイズして、「終了」をクリックします。

ステップ2

できた!

これで、フルスクリーンアクティビティが簡単に作成できました(Javaクラスとアクティビティレイアウトを参照して、動作を確認してください)。


8

AppCompact ... style.xmlを使用している場合

 <style name="Xlogo" parent="Theme.AppCompat.DayNight.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
</style>

次に、マニフェストに名前を入れます...


7

まず、以下のような「NoActionBar」でアプリのテーマを設定する必要があります

<!-- Application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar" />

次に、これらの行をフルスクリーンアクティビティに追加します。

public class MainActiviy extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                                  WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.main);
    }
}

フルスクリーンアクティビティでアクションバー/ツールバーとステータスバーを非表示にします


7

AndroidManifest.xml

<activity ...
          android:theme="@style/FullScreenTheme"
    >
</activity>

I.メインアプリのテーマはTheme.AppCompat.Light.DarkActionBarです。

非表示のActionBar / StatusBar
style.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    ...
</style>

<style name="FullScreenTheme" parent="AppTheme">
    <!--this property will help hide the ActionBar-->
    <item name="windowNoTitle">true</item>
    <!--currently, I don't know why we need this property since use windowNoTitle only already help hide actionbar. I use it because it is used inside Theme.AppCompat.Light.NoActionBar (you can check Theme.AppCompat.Light.NoActionBar code). I think there are some missing case that I don't know-->
    <item name="windowActionBar">false</item>
    <!--this property is used for hiding StatusBar-->
    <item name="android:windowFullscreen">true</item>
</style>

システムナビゲーションバーを非表示にするには

public class MainActivity extends AppCompatActivity {

    protected void onCreate(Bundle savedInstanceState) {
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
        setContentView(R.layout.activity_main)
        ...
    }
 }

II。アプリのメインテーマはTheme.AppCompat.Light.NoActionBarです

非表示のActionBar / StatusBar
style.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    ...
</style>

<style name="FullScreenTheme" parent="AppTheme">
    <!--don't need any config for hide ActionBar because our apptheme is NoActionBar-->
    <!--this property is use for hide StatusBar-->
    <item name="android:windowFullscreen">true</item> // 
</style>

システムナビゲーションバーを非表示にするには

同様Theme.AppCompat.Light.DarkActionBar

デモ


ありがとう。Android 5.0.1でテスト済み。
CoolMind 2018

@CoolMindはまた会いましょう。編集ありがとうございました
ファンヴァンリン

6

答えてくれてありがとう@Cristian私はエラーになりました

android.util.AndroidRuntimeException:コンテンツを追加する前にrequestFeature()を呼び出す必要があります

私はこれを使って解決しました

@Override
protected void onCreate(Bundle savedInstanceState) {

    requestWindowFeature(Window.FEATURE_NO_TITLE);

    super.onCreate(savedInstanceState);

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.activity_login);

    -----
    -----
}

requestWindowFeature(Window.FEATURE_NO_TITLE);前に設定する必要がありsuper.onCreate(savedInstanceState);ますか?
CoolMind 2018

4

完全没入型を表示:

private void askForFullScreen()
    {
        getActivity().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 // hide nav bar
                        | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
                        | View.SYSTEM_UI_FLAG_IMMERSIVE);
    }

完全没入モードから抜ける:

 private void moveOutOfFullScreen() {
        getActivity().getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    }

3

@android:style / Theme.NoTitleBar.Fullscreenではなく、独自のテーマを使用したいと思いました。しかし、ここのいくつかの投稿が述べたように、それは機能していなかったので、私はそれを理解するために微調整をしました。

AndroidManifest.xmlで:

<activity
    android:name=".ui.activity.MyActivity"
    android:theme="@style/MyTheme">
</activity>

styles.xml内:

<style name="MyTheme">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
</style>

注:私の場合、適切に機能する前にではname="windowActionBar"なく、使用name="android:windowActionBar"する必要がありました。したがって、後で新しいAndroidバージョンに移植する必要がある場合に備えて、両方を使用しました。


3

これがサンプルコードです。フラグをオン/オフにして、特定のパーツを非表示/表示することができます。

ここに画像の説明を入力してください

public static void hideSystemUI(Activity activity) {
    View decorView = activity.getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    //| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    //| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
                    | View.SYSTEM_UI_FLAG_IMMERSIVE);
}

次に、デフォルトの状態にリセットします

ここに画像の説明を入力してください

public static void showSystemUI(Activity activity) {
    View decorView = activity.getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}

あなたはあなたから上記の関数を呼び出すことができますonCreate

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.course_activity);
    UiUtils.hideSystemUI(this);
}

3

コトリン

グーグルドキュメントに続いて、簡単な方法があります:

override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus) hideSystemUI() }


private fun hideSystemUI() {
// Enables regular immersive mode.
// For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
// Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE
        // Set the content to appear under the system bars so that the
        // content doesn't resize when the system bars hide and show.
        or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        // Hide the nav bar and status bar
        or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        or View.SYSTEM_UI_FLAG_FULLSCREEN)      }


// Shows the system bars by removing all the flags
// except for the ones that make the content appear under the system bars.
private fun showSystemUI() {
window.decorView.systemUiVisibility = 
(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)       }

Googleドキュメント


2

ヒント:getWindow()。setLayout()を使用すると、全画面表示が台無しになる可能性があります。このメソッドのドキュメントには次のように書かれています。

ウィンドウの幅と高さのレイアウトパラメータを設定します...それらを...絶対値に変更して、全画面ではないウィンドウにすることができます。

http://developer.android.com/reference/android/view/Window.html#setLayout%28int,%20int%29

私の目的のために、フルスクリーンウィンドウのサイズを正しく変更するには、絶対パラメーターを指定してsetLayoutを使用する必要があることがわかりました。ほとんどの場合、これはうまくいきました。onConfigurationChanged()イベントによって呼び出されました。しかし、しゃっくりがありました。ユーザーがアプリを終了し、向きを変更して再入力すると、setLayout()を含むコードが起動されます。この再入時間の期間中、ステータスバー(マニフェストによって非表示になっています)は再表示されますが、それ以外の場合はsetLayout()が原因ではありません。解決策は、次のようなハード値を持つ呼び出しの後に追加のsetLayout()呼び出しを追加することでした。

       public static void setSize( final int width, final int height ){
//DO SOME OTHER STUFF...
            instance_.getWindow().setLayout( width, height );
            // Prevent status bar re-appearance
            Handler delay = new Handler();
            delay.postDelayed( new Runnable(){ public void run() {
                instance_.getWindow().setLayout(
                    WindowManager.LayoutParams.FILL_PARENT,
                    WindowManager.LayoutParams.FILL_PARENT );
            }}, FILL_PARENT_ON_RESIZE_DELAY_MILLIS );
        }

その後、ウィンドウのサイズが正しく変更され、これをトリガーしたイベントに関係なく、ステータスバーが再表示されませんでした。


2
 @Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    adjustFullScreen(newConfig);
}

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        adjustFullScreen(getResources().getConfiguration());
    }
}
private void adjustFullScreen(Configuration config) {
    final View decorView = getWindow().getDecorView();
    if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        decorView.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);
    } else {
        decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
    }
}

2

styles.xmlの内部...

<!-- No action bar -->
<style name="NoActonBar" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Theme customization. -->
    <item name="colorPrimary">#000</item>
    <item name="colorPrimaryDark">#444</item>
    <item name="colorAccent">#999</item>
    <item name="android:windowFullscreen">true</item>
</style>

これでうまくいきました。それがあなたを助けることを願っています。


2

kotlinでは、これは私がやった方法です:

class LoginActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)
        window.decorView.systemUiVisibility =
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
                View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
                View.SYSTEM_UI_FLAG_FULLSCREEN

    }
}

没入モード

没入モードは、ユーザーが画面を頻繁に操作するアプリを対象としています。例としては、ゲーム、ギャラリーでの画像の表示、本やプレゼンテーションのスライドなどのページ付けされたコンテンツの読み取りがあります。そのためには、次の行を追加します。

View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

粘着性のある没入型

通常の没入モードでは、ユーザーが端からスワイプするたびに、システムがシステムバーを表示します。アプリは、ジェスチャーが発生したことさえ認識しません。したがって、多くのスワイプを必要とするゲームをプレイしたり、描画アプリを使用したりする場合など、ユーザーがメインのアプリエクスペリエンスの一部として画面の端から実際にスワイプする必要がある場合は、代わりに「スティッキー」没入モードを有効にする必要があります。 。

View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

詳細情報:フルスクリーンモードを有効にする

キーボードを使用している場合、キーボードが表示されたときにStatusBarが表示されることがあります。その場合、私は通常これを自分のスタイルxmlに追加します

styles.xml

<style name="FullScreen" parent="AppTheme">
    <item name="android:windowFullscreen">true</item>
</style>

そして、私のマニフェストへのこの行

<activity
        android:name=".ui.login.LoginActivity"
        android:label="@string/title_activity_login"
        android:theme="@style/FullScreen">

ありがとう。API 16と19が必要
CoolMind

2

このコードをonCreate()メソッドに貼り付けるだけです

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

1

それは私のために働いた。

if (Build.VERSION.SDK_INT < 16) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
    } else {
        View decorView = getWindow().getDecorView();
        int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
        decorView.setSystemUiVisibility(uiOptions);
    }

1
それ以外の場合は、以下を使用することをお勧めします。getWindow()。getDecorView()。setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
Protonflux 16

1
 protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_splash_screen);
    getSupportActionBar().hide();

}

1

何度も成功しなかった後、私は他の開発者と非常によく似た独自のソリューションを思いつきました。私の問題は、システムナビゲーションバーが呼び出し後に非表示にならないことでした。また、私の場合は横向きが必要だったので、念のためその行とそのすべてにコメントしてください。まず最初にスタイルを作成する

    <style name="FullscreenTheme" parent="AppTheme">
    <item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="android:windowBackground">@null</item>
    <item name="metaButtonBarStyle">?android:attr/buttonBarStyle</item>
    <item name="metaButtonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
</style>

これは私のマニフェストファイルです

<activity
        android:name=".Splash"
        android:screenOrientation="landscape"
        android:configChanges="orientation|keyboard|keyboardHidden|screenLayout|screenSize"
        android:label="@string/app_name"
        android:theme="@style/SplashTheme">

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".MainActivity"
        android:configChanges="orientation|keyboard|keyboardHidden|screenLayout|screenSize"
        android:screenOrientation="landscape"
        android:label="@string/app_name"
        android:theme="@style/FullscreenTheme">
    </activity>

これは私のスパルシュ活動です

public class Splash extends Activity {
/** Duration of wait **/
private final int SPLASH_DISPLAY_LENGTH = 2000;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.splash_creen);

    /* New Handler to start the Menu-Activity
     * and close this Splash-Screen after some seconds.*/
    new Handler().postDelayed(new Runnable(){
        @Override
        public void run() {
            /* Create an Intent that will start the Menu-Activity. */
            Intent mainIntent = new Intent(Splash.this,MainActivity.class);
            Splash.this.startActivity(mainIntent);
            Splash.this.finish();
        }
    }, SPLASH_DISPLAY_LENGTH);
}

}

そして、これが私のメインフルスクリーンアクティビティです。onSystemUiVisibilityChange thiメソッドは重要です。そうしないと、呼び出し後のAndroidメインナビゲーションバーが残り、消えなくなります。本当に苛立たしい問題ですが、この機能はその問題を解決します。

パブリッククラスMainActivityはAppCompatActivity {

private View mContentView;
@Override
public void onResume(){
    super.onResume();

    mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.fullscreen2);
    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null)
    {
        actionBar.hide();
    }
    mContentView = findViewById(R.id.fullscreen_content_text);
    mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);



    View decorView = getWindow().getDecorView();
    decorView.setOnSystemUiVisibilityChangeListener
            (new View.OnSystemUiVisibilityChangeListener()
            {
                @Override
                public void onSystemUiVisibilityChange(int visibility)
                {
                    System.out.println("print");

                    if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0)
                    {
                        mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
                                | View.SYSTEM_UI_FLAG_FULLSCREEN
                                | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
                    }
                    else
                    {

                        mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
                                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

                        }
                }
            });

}

}

これは私のスプラッシュ画面のレイアウトです:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ImageView android:id="@+id/splashscreen" android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:background="@android:color/white"
        android:src="@drawable/splash"
        android:layout_gravity="center"/>
    <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Hello World, splash"/>
</LinearLayout>

This is my fullscreen layout
    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#0099cc"
        >
        <TextView
            android:id="@+id/fullscreen_content_text"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:keepScreenOn="true"
            android:text="@string/dummy_content2"
            android:textColor="#33b5e5"
            android:textSize="50sp"
            android:textStyle="bold" />

    </FrameLayout>

これがお役に立てば幸いです


1

https://developer.android.com/training/system-ui/immersive.html

活動:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        decorView.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);
    }
}

AndroidManifests:

 <activity android:name=".LoginActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/title_activity_login"
            android:theme="@style/FullscreenTheme"
            ></activity>

1

空のアクティビティを作成し、2行追加しonCreateます。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // full screen activity
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getSupportActionBar().hide();

        setContentView(R.layout.activity_main);
    }
    ...
}

1

onCreate()のsetContentViewの後にこのメソッドを使用し、getWindow()によってWindowオブジェクトを渡します。

    public void makeActivityFullScreen(Window window){
    View decorView = window.getDecorView();
    //        int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
       window.getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
    }
    decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
    );
}

このコードはノッチ画面でも機能します。ノッチフルスクリーンを確認するには、Android Pが必要ですが、ノッチディスプレイ電話がある場合は、設定にます->表示設定->アプリの表示比率--->アプリを選択 --->安全な2つのオプションがあります表示と全画面表示、全画面表示を選択してアプリを実行してください。AndroidPieがなくても、全画面表示を一目で確認できます


1

アクティビティを全画面表示にするには、次のようにします。

    // add following lines before setContentView
    // to hide toolbar
                if(getSupportActionBar()!=null)
                    getSupportActionBar().hide();
    //to hide status bar
                getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);

これにより、ツールバーとステータスバーが非表示になります。

しかし、場合によっては、ステータスバーを透明な背景で表示したいことがあります。その場合は、次のようにします。

// add following lines before setContentView
// to hide toolbar
if(getSupportActionBar()!=null)
   getSupportActionBar().hide();
// to make status bar transparent
getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

代わりにツールバーを非表示にする別の方法 getSupportActionBar().hide()

  1. アプリのテーマの親を変更してツールバーを削除します。

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">

  1. ツールバーを1つのアクティビティのみから削除する場合は、マニフェストに移動し、アクティビティタグの下に次を追加します。 android:theme="@style/Theme.AppCompat.Light.NoActionBar"

コトリン愛好家のために、拡張機能を使用してみませんか:

最初の場合:

fun AppCompatActivity.makeItFullScreenStatusBarVisible(){
    supportActionBar?.hide()
    window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
}

そしてこれを前に呼び出しますsetContentView

makeItFullScreenStatusBarVisible()

2番目の場合:

fun AppCompatActivity.makeItFullScreenStatusBarHidden(){
    supportActionBar?.hide()
    window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)
}

そしてそれを前に呼び出しますsetContentView

makeItFullScreenStatusBarHidden()

0

Android 10では、どれもうまくいきませんでした。

しかし、私は完全にうまくいった(oncreateの1行目):

    View decorView = getWindow().getDecorView();
    int uiOptions = View.SYSTEM_UI_FLAG_IMMERSIVE;
    decorView.setSystemUiVisibility(uiOptions);

    setContentView(....);

    if (getSupportActionBar() != null) {
        getSupportActionBar().hide();
    }

楽しい :)


0

ノッチまたは切り抜き領域を通してコンテンツを表示します。これはドキュメントから役立ちます:

LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES-コンテンツは、縦長モードと横長モードの両方でカットアウト領域にレンダリングされます。

私にとって重要なのは、アクティビティスタイルのこの行です。

// Important to draw through the cutouts
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item> 

私にとっては、没入モードで画像を表示したかったのです。クリックすると、システムUI(ステータスバーとナビゲーションバー)が表示されます。

これが私の解決策です:

1-アクティビティで、システムUI(ステータス/ナビゲーションバー)を表示/非表示にするいくつかのメソッド

private fun hideSystemUI() {
    sysUIHidden = true
    window.decorView.systemUiVisibility = (
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            or View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
            // Hide the nav bar and status bar
            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // Hide nav bar
            or View.SYSTEM_UI_FLAG_FULLSCREEN // Hide status bar
            )
}


private fun showSystemUI() {
    sysUIHidden = false
    window.decorView.systemUiVisibility = (
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            // Set the content to appear under the system bars so that the
            // content doesn't resize when the system bars hide and show.
            or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION // layout Behind nav bar
            or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN // layout Behind status bar
            )
}

2-これをxmlレイアウトのルートビューで確認してください

android:fitsSystemWindows="false"

3-フルスクリーンアクティビティのスタイルは、ステータス/ナビゲーションバーが表示されたときに、背景を半透明にします。

<style name="FullscreenTheme" parent="AppTheme">
    <item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="android:windowBackground">@null</item>
    <item name="metaButtonBarStyle">?android:attr/buttonBarStyle</item>
    <item name="metaButtonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
    <item name="android:statusBarColor">#50000000</item>
    <item name="android:navigationBarColor">#50000000</item>
    // Important to draw behind cutouts
    <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item> 
</style>

<style name="FullscreenActionBarStyle" parent="Widget.AppCompat.ActionBar">
    <item name="android:background">@color/sysTransparent</item>
</style>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.