Android: comment masquer ActionBar sur certaines activités


93

J'ai développé une application de démonstration simple avec un écran de démarrage, une carte et quelques écrans réguliers.

J'ai une barre d'action en haut qui contient un logo. Tout va bien sur mon téléphone (Galaxy s1 I9000 V2.3) mais lorsque je le teste sur Galaxy s2 v4, la barre d'action apparaît également sur l'écran de démarrage et sur l'écran de la carte.

L'activité spalsh et map n'hérite même pas d'ActionBarActivity, alors comment est-ce possible et comment puis-je la faire disparaître?

Manifeste:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:theme="@style/Theme.AppCompat.Light" >
        <activity
            android:name=".HomeActivity"
            android:icon="@drawable/android_logo"
            android:label=""
            android:logo="@drawable/android_logo" >

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

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            -->
        </activity>
        <activity
            android:name=".MapActivity"
            android:label="" >
        </activity>
        <activity
            android:name=".PackageActivity"
            android:icon="@drawable/android_logo"
            android:label=""
            android:logo="@drawable/android_logo" >
        </activity>
        <activity
            android:name=".SplashActivity"
            android:label="" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

    </application>

Définition de MapActivity (c'est une longue, donc je n'ai inclus que la définition):

public class MapActivity extends FragmentActivity implements LocationListener

Activité Splash:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;

public class SplashActivity extends Activity{

    private static final long SPLASH_DISPLAY_LENGTH = 2000;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        new Handler().postDelayed(new Runnable(){
            @Override
            public void run() {
                Intent mainIntent = new Intent(SplashActivity.this,HomeActivity.class);
                SplashActivity.this.startActivity(mainIntent);
                SplashActivity.this.finish();
            }
        }, SPLASH_DISPLAY_LENGTH);

    }

}

Réponses:


129

Appliquez ce qui suit dans votre thème pour l'activité en AndroidManifest.xml:

<activity android:name=".Activity"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Cela devrait faire l'affaire.


1
Je ne peux pas utiliser getActionBarcar l'activité n'hérite pas deActionBarActivity
Tomer

si j'utilise <item name="android:windowActionBar">false</item>cela ne le cacherait-il pas sur tous les écrans?
Tomer

Mettez à jour ma réponse qui devrait être plus adaptée à votre besoin.
Si8

131

Lorsque vous demandez comment vous cacher dans une certaine activité , voici ce dont vous avez besoin:

getSupportActionBar().hide(); 

32

Accédez à votre manifest.xmldossier.

2. Findle activity tagpour lequel vous souhaitez masquer votre ActionBar, puis add,

android: theme = "@ style / Theme.AppCompat.NoActionBar"

           <activity
            android:name=".MainActivity"
            android:theme="@style/Theme.AppCompat.NoActionBar"
            >

21

Si vous voulez obtenir le plein écran sans actionBar et Title.

Ajoutez-le dans style.xml

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

et utilisez le style at activity de manifest.xml.

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

15

Le ActionBarexiste généralement le long de Fragmentssorte que Activityvous pouvez le cacher

getActionBar().hide();
getActionBar().show();

et à partir du Fragmenttu peux le faire

getActivity().getActionBar().hide();
getActivity().getActionBar().show();

6
J'utilise: getSupportActionBar().hide(); dans ActionBarActivity
Ihab Shoully

8

Si vous utilisiez Theme.AppCompat.Light, un meilleur équivalent serait Theme.AppCompat.Light.NoActionBar.

J'ai constaté que l'utilisation de Theme.AppCompat.NoTitleBar rendait le texte de mon bouton invisible, donc j'utilise Theme.AppCompat.Light.NoActionBar.

<activity android:name=".Activity"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.AppCompat.Light.NoActionBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

7

Cela fonctionne pour moi! Mettez ceci dans votre activité dans les manifestes

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

Vous pouvez également créer votre thème personnalisé dans styles.xml comme ceci:

<style name="Theme.MyCustomTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name = "android:windowActionBar">false</item>
        <item name = "android:windowNoTitle">true</item>
        // more custom...
    </style>

J'espère que cette aide.


5

Vous pouvez utiliser le mode Low Profile Voir ici

Il suffit de rechercher SYSTEM_UI_FLAG_LOW_PROFILEqui assombrit également les boutons de navigation s'ils sont présents sur l'écran.


+1 pour m'avoir présenté ceci :), je vais d'abord vérifier la solution @ SiKni8 car je préfère une solution non codante
Tomer

1
Pas de problème, je l'ai trouvé vraiment utile pour afficher une carte en plein écran dans mon application, cela fonctionne très bien pour moi.
TMH

4

Les réponses ci-dessus aideraient avec la chose ActionBar. Pour y ajouter, utilisez le code suivant au cas où vous utilisez l'écran de démarrage: Utilisez ceci avant de définir l'affichage du contenu:

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

Juste pour clarifier, voici comment procéder:

    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);         
    setContentView(R.layout.activity_main);

Cela ferait de votre écran un plein écran, c'est-à-dire supprimer la barre supérieure où vous voyez la barre réseau, etc.


4

Appliquez ce qui suit dans votre thème pour l'activité dans AndroidManifest.xml:

<activity android:name=".DashboardActivity"
        android:theme="@style/AppFullScreenTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

Appliquez ensuite ce qui suit dans votre style dans style.xml

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

2

// Cachez l'ActionBar en haut

// Ajoute ce code dans le fichier java

    ActionBar actionBar=getSupportActionBar();
    actionBar.hide();

1

Cela fonctionne dans l'API 27

Dans le styles.xml, remplacez le code par ce qui suit ...

<resources>
    <!-- No Action Bar -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
</resources>

Ensuite, dans les fichiers (par exemple, activity_list.xml) dans lesquels vous voulez avoir une barre d'outils, mettez le code suivant.

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:background="@color/colorPrimary"/>

Si vous rencontrez des problèmes, passez à la mise en page linéaire (car c'est sur quoi ce code est testé)


1

D' ici :

À partir d'Android 3.0 (niveau d'API 11), toutes les activités qui utilisent le thème par défaut ont une ActionBar comme barre d'applications. Cependant, les fonctionnalités de la barre d'applications ont été progressivement ajoutées à l'ActionBar native sur diverses versions d'Android. Par conséquent, l'ActionBar native se comporte différemment selon la version du système Android qu'un appareil peut utiliser . En revanche, les fonctionnalités les plus récentes sont ajoutées à la version de la bibliothèque de support de la barre d' outils , et elles sont disponibles sur tout appareil pouvant utiliser la bibliothèque de support.

Une option consiste donc à désactiver complètement ActionBar (dans le fichier manifest.xml de l'application), puis à ajouter la barre d'outils dans chaque page nécessitant une ActionBar.

(suivez le lien ci-dessus pour une explication étape par étape)


0

Remplacer AndroidManifest.xml

android:theme="@style/FullscreenTheme"

à

android:theme="@style/Theme.Design.NoActionBar"

0

Ajoutez un nouveau style dans votre style.xml

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="LoginTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

puis ajoutez la ligne suivante dans votre manifeste

<activity android:name=".Login"
        android:label="@string/app_name"
        android:theme="@style/LoginTheme"
        >

0

Vérifiez l'attribut de remplissage si le problème persiste après le changement de thème.

Problème de remplissage créant un espace blanc au-dessus de la fenêtre de fragment / fenêtre d'application

Problème de remplissage créant un espace blanc au-dessus de la fenêtre de fragment / fenêtre d'application

Une fois que vous supprimez le remplissage - valeur supérieure automatiquement, l'espace blanc est supprimé.

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.