Thème plein écran pour AppCompat


304

Je voudrais savoir comment appliquer un thème plein écran (pas de barre de titre + pas de barre d'action) à une activité. J'utilise la bibliothèque AppCompat du package de support v7.

J'ai essayé de m'appliquer android:theme="@android:style/Theme.NoTitleBar.Fullscreen"à mon activité spécifique mais elle s'est écrasée. Je pense que c'est parce que mon thème d'application est comme ça.

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

J'ai aussi essayé ça

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

qui ne masque que la barre de titre mais pas la barre d'action. Ma solution actuelle consiste à masquer la barre d'action avec

getSupportActionBar().hide();

Réponses:


836

Lorsque vous utilisez Theme.AppCompat dans votre application, vous pouvez utiliser FullScreenTheme en ajoutant le code ci-dessous aux styles.

<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>

et mentionnez également dans votre fichier manifeste.

<activity
   android:name=".activities.FullViewActivity"
   android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen" 
/>

67
Le style parent doit être "Theme.AppCompat.Light.NoActionBar"
Hover Ruan

3
En fait, il suffit d'ajouter ceci au fichier xml de style: <item name = "android: windowFullscreen"> true </item>. La visibilité de la barre d'actions (barre de titre) peut être contrôlée séparément à l'aide des méthodes .hide / .show lors de l'exécution.
Amin

2
FEATURE_NO_TITLE n'était pas honoré. Je ne sais pas la différence, mais j'ai finalement changé mon activité pour étendre l'activité au lieu d'AppCompatActivity et mon même code a fonctionné (heureusement, je n'ai pas besoin d'AppCompat): this.requestWindowFeature (Window.FEATURE_NO_TITLE); getWindow (). getDecorView (). setSystemUiVisibility (View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_I
user888867

cela masque également la barre d'état :(
Omama

3
Je voudrais ajouter hideNavigation()à onResume()- sans cela, la barre de navigation était encore visible dans mon application (api 18+)
Antek

69

Sur la base de la réponse de @nebyan, j'ai trouvé que la barre d'action ne se cache toujours pas.

Le code suivant fonctionne pour moi:

<style name="AppFullScreenTheme" parent="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>

et bien sûr, n'oubliez pas de modifier votre AndroidManifestfichier.

<activity
    android:name="YOUR_ACTIVITY_NAME"
    android:theme="@style/AppFullScreenTheme" 
/>

@nebyan pourquoi votre solution ne fonctionne pas, et celle-ci fonctionne pour moi? Quelle est la raison?
ahmet

1
pas besoin de définir <item name="android:windowNoTitle">true</item> <item name="android:windowActionBar">false</item>si votre thème comprend.NoActionBar
user924

19
<style name="Theme.AppCompat.Light.NoActionBar" parent="@style/Theme.AppCompat">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
</style>

En utilisant le xml ci-dessus dans style.xml, vous pourrez masquer le titre ainsi que la barre d'action.


12

Des problèmes surviennent entre les versions avant et après d'Android 4.0 (API niveau 14).

à partir de là, j'ai créé ma propre solution.

@SuppressLint("NewApi")
@Override
protected void onResume()
{
    super.onResume();

    if (Build.VERSION.SDK_INT < 16)
    {
        // Hide the status bar
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        // Hide the action bar
        getSupportActionBar().hide();
    }
    else
    {
        // Hide the status bar
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
        / Hide the action bar
        getActionBar().hide();
    }
}

J'écris ce code dans la méthode onResume () car si vous quittez votre application et que vous la rouvrez, la barre d'action reste active! (et donc cela résout le problème)

J'espère que cela a été utile;)


Notez que si l'utilisateur tire manuellement la barre d'état, il ne se réorganisera pas. Pour aggraver les choses, si le clavier virtuel s'affiche, la barre d'état s'affiche également automatiquement et ne s'affiche pas à nouveau.
Hendra Anggrian


7
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //to remove "information bar" above the action bar
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    //to remove the action bar (title bar)
    getSupportActionBar().hide();
}

5

Vous pouvez suivre l'étape ci-dessous: -

AndoridMenifest.xml

<activity
            android:name=".ui.FullImageActivity"
            android:label="@string/title_activity_main"
            android:screenOrientation="landscape"
            android:theme="@style/DialogTheme">
        </activity>

Style.xml

<style name="DialogTheme" parent="android:Theme.Dialog">

    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">fill_parent</item>

   <!-- No backgrounds, titles or window float -->
    <item name="android:windowNoTitle">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>
</style>

FullImageActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    setContentView(R.layout.image_view);
     }

J'espère que cela vous aidera .. Merci !!


4

Ce doit être parent = "@ style / Theme.AppCompat.Light.NoActionBar"

<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>

Seule cette solution masque la barre de titre et la rend complètement en plein écran. Doit être marqué comme la bonne solution. Merci!
Darko Maksimovic

3

Pour masquer la barre d'état et la barre d'action et rendre votre activité en plein écran, utilisez le code suivant dans la méthode onResume()ou l'activité de votre activité onWindowFocusChanged():

@Override
protected void onResume() {
    super.onResume();
    View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | 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);
}

Vous pouvez trouver plus d'informations dans les liens suivants:

Remarque: En utilisant les solutions xml fournies dans ce fil, je ne pouvais que masquer la barre d'état mais pas la barre de navigation.


1
Merci, c'est le seul qui cache la barre de navigation! Recommande fortement cette réponse.
Maharkus


2

Ce thème ne fonctionne qu'après l'API 21 (inclus). Et rendez la barre d'état et la barre de navigation transparentes.

<style name="TransparentAppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  <item name="windowActionBar">false</item>
  <item name="windowNoTitle">true</item>
  <item name="android:statusBarColor">@android:color/transparent</item>
  <item name="android:windowBackground">@android:color/transparent</item>
  <item name="android:navigationBarColor">@android:color/transparent</item>
  <item name="android:windowIsTranslucent">true</item>
  <item name="android:windowContentOverlay">@null</item>
</style>

1

Pour supprimer la barre de titre dans AppCompat:

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

1

Vous pouvez essayer ce qui suit :

<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="android:windowFullscreen">true</item>
</style>

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


1
Veuillez également expliquer le code, si vous le fournissez, il vous aidera à comprendre votre code et à mieux comprendre les problèmes futurs.
Lepidopteron

0

juste ça ?

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen">
    <item name="android:windowFullscreen">true</item>
</style>

0

Simplement à ce gars à votre style:

<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item> </style>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.