Android: come nascondere ActionBar su determinate attività


93

Ho sviluppato una semplice applicazione demo con una schermata iniziale, una mappa e alcune schermate regolari.

Ho una barra delle azioni in alto che contiene un logo. Sembra tutto a posto sul mio telefono (Galaxy s1 I9000 V2.3) ma quando lo provo su Galaxy s2 v4 la barra delle azioni appare anche nella schermata iniziale e nella schermata della mappa.

Le attività spalsh e mappa non ereditano nemmeno da ActionBarActivity, quindi come è possibile e come posso farlo andare via?

Manifesto:

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

Definizione di MapActivity (è lunga quindi ho incluso solo la definizione):

public class MapActivity extends FragmentActivity implements LocationListener

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

    }

}

Risposte:


127

Applica quanto segue nel tuo tema per l'attività in 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>

Questo dovrebbe fare il trucco.


1
Non posso usare getActionBarperché l'attività non eredita daActionBarActivity
Tomer

se lo usassi <item name="android:windowActionBar">false</item>non lo nasconderei su tutti gli schermi?
Tomer

Aggiorna la mia risposta che dovrebbe essere più adatta alle tue esigenze.
Si8

130

Poiché chiedi come nasconderti in una determinata attività , questo è ciò di cui hai bisogno:

getSupportActionBar().hide(); 

32

1.Vai al tuo manifest.xmlfile.

2. Findil activity tagper il quale vuoi nascondere la tua ActionBar e poi add,

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

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

21

Se vuoi ottenere lo schermo intero senza actionBar e Title.

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

e usa lo stile in attività di manifest.xml.

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

15

Di ActionBarsolito esiste lungo, Fragmentsquindi Activitypuoi nasconderlo

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

e da Fragmentlì puoi farlo

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

6
Uso: getSupportActionBar().hide(); in ActionBarActivity
Ihab Shoully

8

Se stavi usando Theme.AppCompat.Light, un equivalente migliore sarebbe Theme.AppCompat.Light.NoActionBar.

Ho scoperto che l'utilizzo di Theme.AppCompat.NoTitleBar ha reso invisibile il testo del mio pulsante, quindi sto usando 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

Questo funziona per me! Inseriscilo nella tua attività nei manifesti

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

Puoi anche creare il tuo tema personalizzato in styles.xml in questo modo:

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

Spero che questo aiuto.


5

È possibile utilizzare la modalità Basso profilo Vedi qui

Basta cercare SYSTEM_UI_FLAG_LOW_PROFILEche oscuri anche i pulsanti di navigazione se sono presenti sullo schermo.


+1 per avermi presentato questo :), controllerò prima la soluzione @ SiKni8 perché preferisco la soluzione non codificante
Tomer

1
Nessun problema, l'ho trovato davvero utile per visualizzare una mappa a schermo intero nella mia app, funziona davvero bene per me.
TMH

4

Le risposte di cui sopra aiuterebbero con la cosa ActionBar. Per aggiungerlo, usa il codice seguente nel caso in cui stai usando la schermata iniziale: Usa questo prima di impostare la visualizzazione del contenuto:

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

Giusto per chiarire, ecco come lo fai:

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

Questo renderebbe il tuo schermo uno schermo intero, cioè rimuovere la barra in alto dove vedi la barra di rete, ecc


4

Applica quanto segue nel tuo tema per l'attività in 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>

Quindi applica quanto segue nel tuo stile in 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

// Nasconde la ActionBar in alto

// Aggiungi questo codice nel file java

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

1

Funziona nell'API 27

In styles.xml sostituire il codice nel seguente ...

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

Quindi nei file (es. Activity_list.xml) in cui vuoi avere una barra degli strumenti inserisci il seguente codice.

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

In caso di problemi passare al layout lineare (perché è su questo che viene testato questo codice)


1

Da qui :

A partire da Android 3.0 (livello API 11), tutte le attività che utilizzano il tema predefinito hanno una ActionBar come barra delle app. Tuttavia, le funzionalità della barra delle app sono state gradualmente aggiunte alla ActionBar nativa in varie versioni di Android. Di conseguenza, la ActionBar nativa si comporta in modo diverso a seconda della versione del sistema Android utilizzata da un dispositivo . Al contrario, le funzionalità più recenti vengono aggiunte alla versione della libreria di supporto di Toolbar e sono disponibili su qualsiasi dispositivo che può utilizzare la libreria di supporto.

Quindi un'opzione è disabilitare completamente ActionBar (nel file manifest.xml dell'app) e quindi aggiungere la barra degli strumenti in ogni pagina che necessita di una ActionBar.

(segui il link sopra per la spiegazione passo passo)


0

Sostituisci AndroidManifest.xml

android:theme="@style/FullscreenTheme"

per

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

0

Aggiungi nuovo stile nel tuo 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>

e quindi aggiungi la seguente riga nel tuo manifest

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

0

Controlla l'attributo padding se il problema persiste dopo aver cambiato tema.

Problema di riempimento che crea uno spazio bianco sopra la finestra del frammento / finestra dell'app

Problema di riempimento che crea uno spazio bianco sopra la finestra del frammento / finestra dell'app

Una volta rimosso il riempimento, il valore superiore viene rimosso automaticamente dallo spazio bianco.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.