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

    }

}
Tomer
la source

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.

Si8
la source
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(); 
Erluxman
la source
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"
            >
Prateek Joshi
la source
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> 
reza.cse08
la source
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();
sandalone
la source
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>
joshgoldeneagle
la source
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.

Kyo Huu
la source
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.

TMH
la source
+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.

BlueLeaf
la source
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>
Kanaiyalal Badal
la source
2

// Cachez l'ActionBar en haut

// Ajoute ce code dans le fichier java

    ActionBar actionBar=getSupportActionBar();
    actionBar.hide();
Ajay Patel
la source
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é)

Feu du dragon
la source
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)

LoMaPh
la source
0

Remplacer AndroidManifest.xml

android:theme="@style/FullscreenTheme"

à

android:theme="@style/Theme.Design.NoActionBar"
Tarik Billa
la source
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"
        >
Suraj Gupta
la source
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é.

Aravindhan Kumar
la source