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();
Ye Lin Aung
la source

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" 
/>
nebyan
la source
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" 
/>
Hover Ruan
la source
@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.

Dharmendra Pratap Singh
la source
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;)

KrhashisM
la source
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();
}
Shuyan Ji
la source
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 !!

jagdish
la source
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>
vntstudy
la source
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.

Darush
la source
1
Merci, c'est le seul qui cache la barre de navigation! Recommande fortement cette réponse.
Maharkus
2
requestWindowFeature(Window.FEATURE_NO_TITLE);
prashantwosti
la source
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>
DysaniazzZ
la source
1

Pour supprimer la barre de titre dans AppCompat:

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

Vous pouvez essayer ce qui suit :

<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="android:windowFullscreen">true</item>
</style>
Sumit Shukla
la source
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>

Matt Barrera
la source
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>
Xan
la source
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>
Reza Hamzehei
la source