Come nascondere la barra del titolo per un'attività in XML con tema personalizzato esistente


876

Voglio nascondere la barra del titolo per alcune delle mie attività. Il problema è che ho applicato uno stile a tutte le mie attività, quindi non posso semplicemente impostare il tema su @android:style/Theme.NoTitleBar.

Usando il tema NoTitleBar come genitore per il mio stile rimuove la barra del titolo da tutte le mie attività.

Posso impostare da qualche parte un oggetto senza stile di titolo?

Risposte:


1065

Fallo nel tuo onCreate()metodo.

//Remove title bar
this.requestWindowFeature(Window.FEATURE_NO_TITLE);

//Remove notification bar
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

//set content view AFTER ABOVE sequence (to avoid crash)
this.setContentView(R.layout.your_layout_name_here); 

thissi riferisce al Activity.


7
Bella risposta. Tuttavia, non è necessario eseguire entrambe le operazioni, la rimozione della barra di notifica potrebbe essere eccessiva.
Jim Blackler,

209
Assicurati di inserirlo prima della chiamata a setContentView (R.id.x), altrimenti si bloccherà. La ragione non è stata immediatamente ovvia per me. 08-13 12: 47: 33.561 E / AndroidRuntime (9125): java.lang.RuntimeException: impossibile avviare l'attività ComponentInfo {com.myapp / com.myapp.SplashActivity}: android.util.AndroidRuntimeException: requestFeature () deve essere chiamato prima di aggiungere contenuti
mobibob,

9
Si dovrebbe davvero dire che quando si usa requestWindowFeature (), una forza-stretta si verificherà se si esegue questa riga dopo l'aggiunta di qualsiasi contenuto. E a parte questo, il metodo XML è molto più sicuro e separa anche la struttura della pagina dal tuo codice, (che è l' intero scopo degli XML in primo luogo.)
b1nary.atr0phy

21
Questo non funziona usando l'API 22. Vedo ancora inizialmente la barra del titolo all'avvio dell'app.
user2966445,

7
funziona se la tua attività estende Attività NON AppCompatActivity cioè la tua classe dovrebbe essere dichiarata come classe pubblica myActi estende Attività {}
Manpreet Singh Dhillon

523

Puoi modificare il tuo AndroidManifest.xml:

<activity android:name=".MainActivity"
          android:label="@string/app_name"
          android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">

o usa android:theme="@android:style/Theme.Black.NoTitleBar"se non hai bisogno di un'attività a schermo intero.

Nota: se in precedenza hai utilizzato una vista "predefinita", probabilmente dovresti anche cambiare la classe genitore da AppCompatActivitya Activity.


1
Non so perché. Ho usato solo il progetto predefinito e ho aggiunto un'attività. Il completamento automatico non funziona, ma il tema è lì.
Redax,

82
android:theme="@android:style/Theme.Black.NoTitleBar"è probabilmente più utile a meno che tu non stia facendo un gioco
Chris S,

7
Oppure <style name = "AppTheme" parent = "android: Theme.Light.NoTitleBar" /> per illuminare il tema.
Fernando JS,

20
Non so perché, ma questo sta bloccando la mia app. Qualsiasi aiuto?
Akeshwar Jha,

12
@Akeshwar: potrebbe essere necessario pasticciare con il file styles.xml. Ad esempio, modifica <style name = "AppTheme" parent = "Theme.AppCompat.Light.DarkActionBar"> in <style name = "AppTheme" parent = "Theme.AppCompat.Light.NoActionBar">. In tal caso, non è necessario modificare il file AndroidManifest.xml. (Anche io stavo subendo l'incidente, fino a quando non ho fatto questa correzione.)
Brit Clousing

385

Ora ho fatto quanto segue.

Ho dichiarato uno stile ereditando tutto dal mio stile generale e quindi disabilitando la barra del titolo.

<style name="generalnotitle" parent="general">
    <item name="android:windowNoTitle">true</item>
</style>

Ora posso impostare questo stile su ogni attività in cui voglio nascondere la barra del titolo sovrascrivendo lo stile largo dell'applicazione ed ereditando tutte le altre informazioni di stile, quindi nessuna duplicazione nel codice di stile.

Per applicare lo stile a una particolare attività, apri AndroidManifest.xmle aggiungi il seguente attributo al activitytag;

<activity
    android:theme="@style/generalnotitle">

13
Credo che abbia creato uno stile chiamato "generale" e lo stia semplicemente estendendo. Basta rimuoverlo per uso personale.
rcl,

7
+1 per rispondere alla domanda, piuttosto che specificare il modo più ovvio per ottenere risultati simili come fanno la maggior parte delle altre risposte a questa domanda. È solo un peccato che tu abbia dovuto rispondere alla tua domanda per ottenere una risposta accurata ...
Jules,

1
questa risposta è la migliore. Anche tu puoi usare qualsiasi altro tema fornito da Android senza barra del titolo. Grazie mille per la condivisione
Narendra Pal

4
Credo che questa sia una soluzione più elegante di programmatica this.requestWindowFeature (Window.FEATURE_NO_TITLE); perché in questo caso sono ancora visibili alcuni "
battiti di

1
Migliore risposta alla domanda OP :) Ma ciò non risolve la barra del titolo sulla mia attività (API19)
1111161171159459134,

166

Non mi piace this.requestWindowFeature(Window.FEATURE_NO_TITLE);perché la barra del titolo appare brevemente, quindi scompare.

Inoltre, non mi piace android:theme="@android:style/Theme.NoTitleBar"perché ho perso tutte le modifiche di Holo 3.0+ a cui si sono abituati gli utenti dei nuovi dispositivi. Quindi ho trovato questa soluzione.

Nella cartella res / valori crea un file chiamato styles.xml (se non esiste già). In quel file inserire il seguente codice:

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="Theme.Default" parent="@android:style/Theme"></style>
    <style name="Theme.NoTitle" parent="@android:style/Theme.NoTitleBar"></style>
    <style name="Theme.FullScreen" parent="@android:style/Theme.NoTitleBar.Fullscreen"></style>
</resources>

Quindi creare un res / valori-v11 con un altro file styles.xml (ancora una volta questo potrebbe già esistere). In quel file inserire il seguente codice:

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="Theme.Default" parent="@android:style/Theme.Holo"></style>
    <style name="Theme.NoTitle" parent="@android:style/Theme.Holo.NoActionBar"></style>
    <style name="Theme.FullScreen" parent="@android:style/Theme.Holo.NoActionBar.Fullscreen"></style>
</resources>

E se stai scegliendo come target 4.0+, crea una cartella res / valori-v14 con l'ennesimo file styles.xml (Sì, potrebbe già essere lì). In quel file inserire il seguente codice:

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="Theme.Default" parent="@android:style/Theme.Holo.Light"></style>
    <style name="Theme.NoTitle" parent="@android:style/Theme.Holo.Light.NoActionBar"></style>
    <style name="Theme.FullScreen" parent="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen"></style>
</resources>

Infine, con tutti questi file creati, apri il tuo file AndroidManifiest.xml e puoi aggiungere il codice:

android:theme="@style/Theme.NoTitle"

al tag attività dell'attività per cui non si desidera alcun titolo o al tag applicazione se si desidera che si applichi all'intera applicazione.

Ora i tuoi utenti riceveranno i temi associati alla loro versione del dispositivo con il layout dello schermo che desideri.

PS La modifica del valore in android:theme="@style/Theme.FullScreen"avrà lo stesso effetto, ma rimuoverà anche la barra di notifica.


Loro..questo funziona bene per quello che hai detto, ma le immagini sono state strillate quando si cambiano i temi. Quindi che si fa ???
Arun,

1
@arun - Non ho avuto problemi di immagine usando questo metodo. Cosa intendi per strillo?
Devin Stewart,

1
Migliore risposta .. this.requestWindowFeature (Window.FEATURE_NO_TITLE); non è adatto e <item name = "android: windowNoTitle"> true </item> ha perso il tema originale..Grazie @DevinStewart .. accetta +1 per la tua spiegazione :)
lynndragon

5
Ah, sciocco me! Stavo usando ActionBarActivity, il che non ha senso se si desidera RIMUOVERE LA BARRA AZIONE! Passare a una semplice attività o frammento di attività consente a questa bella soluzione di funzionare come un incantesimo.
Scott Biggs,

1
"Purtroppo YourApp si è fermata."
Chris Allinson,

104

La barra del titolo può essere rimossa in due modi, come indicato nella pagina Android dello sviluppatore:

Nel manifest.xmlfile:

  1. Aggiungi quanto segue applicationse desideri rimuoverlo per tutte le attività in un'app:

    <application android:theme="@android:style/Theme.Black.NoTitleBar">
  2. O per un'attività particolare:

    <activity android:theme="@android:style/Theme.Black.NoTitleBar">

15
È meglio usare android: theme = "@ android: style / Theme.DeviceDefault.NoActionBar.Fullscreen" invece di black.theme. Consenti al dispositivo di gestire il tema. ma grazie, ho usato il tuo approccio
Varand Pezeshkian,

54

la risposta corretta probabilmente non è quella di estendere ActionbarActivity piuttosto che estendere solo l'attività


se usi ancora la barra delle azioni sembra che funzioni:

@Override
protected void onCreate(Bundle savedInstanceState) {          
    super.onCreate(savedInstanceState);
    getSupportActionBar().hide(); //<< this
    setContentView(R.layout.activity_main);
}

sembra che funzioni anche questo:

styles.xml:

   <style name="AppBaseTheme" parent="Theme.AppCompat.Light" >
          <item name="android:windowNoTitle">true</item>   <!-- //this -->     
   </style>

potrei fare come scrisse Scott Biggs. questo tipo di opere. tranne che non c'è tema allora. intendo lo sfondo del menu delle impostazioni è trasparente:

basta cambiare

public class MainActivity extends ActionBarActivity {

to Activity o FragmentActivity

public class MainActivity extends Activity  {

tuttavia potrei farlo sembrare abbastanza buono usando il design del materiale e non rimuovere la barra delle azioni: https://gist.github.com/shimondoodkin/86e56b3351b704a05e53

  1. impostare l'icona dell'applicazione
  2. imposta i colori della barra delle azioni in modo che corrispondano al design.
  3. impostare l'icona sul menu delle impostazioni
  4. aggiungi più icone (pulsanti in alto)

è l'esempio dello stile della barra delle azioni di compatibilità del design dei materiali.


4
Cambiare ActionBarActivity in Activity ha fatto il trucco per me!
DritanX,

44

cosa funziona per me:

1- in styles.xml:

 <style name="generalnotitle" parent="Theme.AppCompat.Light" >
          <item name="android:windowNoTitle">true</item>   <!-- //this -->     
   </style>

2- in MainActivity

@Override
protected void onCreate(Bundle savedInstanceState) {          
    super.onCreate(savedInstanceState);
    getSupportActionBar().hide(); //<< this
    setContentView(R.layout.activity_main);
}
  1. in manifest ereditano lo stile:

    <activity android:name=".MainActivity" android:theme="@style/generalnotitle">

Come descritto sopra, a volte non funziona da XML. Non so esattamente perché, non ne sono del tutto sicuro, ma getSupportActionBar().hide();in onCreate () {} farà il lavoro
ZeePee,

43

Se utilizzi l' this.requestWindowFeature(Window.FEATURE_NO_TITLE)utente sarà comunque in grado di vedere la barra del titolo solo per un momento durante l'animazione di avvio all'avvio dell'attività onCreate. Se si utilizza @android:style/Theme.Black.NoTitleBarcome mostrato di seguito, la barra del titolo non verrà visualizzata durante l'animazione di avvio.

<activity 
    android:name=".MainActivity" 
    android:label="My App"
    android:theme="@android:style/Theme.Black.NoTitleBar"
    android:screenOrientation="portrait">

l'esempio sopra avrà ovviamente la precedenza sul tema dell'applicazione esistente, se si dispone di un tema esistente, aggiungere <item name="android:windowNoTitle">true</item>ad esso.


La mia attività è a istanza singola con @android: style / Theme.Black.NoTitleBar ma l'utilizzo di questo codice funzionerà quando l'attività viene creata Prima volta che conosci l'attività SingleInstance quindi non viene creata, quindi utilizza solo il metodo OnNewItent Ma ora il mio problema è quando Activity Show è solo Mostra barra di stato per 4 secondi. Come posso uscirne. Ecco la mia domanda Il link è stackoverflow.com/questions/9308767/…
Herry,

29

quando ho provato a utilizzare tutte quelle risposte con un punteggio elevato, la mia app si è sempre bloccata. (penso che abbia qualcosa a che fare con "@android: style"?)

La soluzione migliore per me era usare quanto segue:

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

Nessuna intestazione / barra del titolo più. Inseriscilo nella <application>...</application>o a <activity>...</activity>seconda che tu (non) la desideri nell'intera app o solo un'attività specifica.


Questo è il modo migliore (o l'unico?) Se l'app "estende AppCompatActivity"!
Ferrarezi,

17

Crea un tema come di seguito.

 <!-- Variation on the Light theme that turns off the title -->
<style name="MyTheme" parent="android:style/Theme.Black">
    <item name="android:windowNoTitle">true</item>
</style>

16

Inserisci

<item name="android:windowNoTitle">true</item>

all'interno di AppTheme (styles.xml)


15

Basta usare getActionBar().hide();nel onCreate()metodo di attività principale .


14

Devi solo cambiare AppThemestile in Style.xml se sostituisci la definizione daDarkActionBar

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

per NoActionBar

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

AppTheme definito in AndroidManifast.xml


14

Per AppCompat, la seguente soluzione ha funzionato per me:

Aggiungi un nuovo stile di tema senza barra delle azioni nel tuo styles.xmle imposta parent="Theme.AppCompat.NoActionBar".

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">

    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimary</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowBackground">@color/colorPrimary</item>

</style>


Ora implementa lo stesso stile del tema per l'attività della schermata iniziale in androidManifest.xml

<activity
        android:name=".ActivityName"
        android:theme="@style/SplashTheme"> // apply splash them here 

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

Ecco il risultato:

inserisci qui la descrizione dell'immagine


11

Puoi usare questo codice nel tuo file java

aggiungi questa riga prima di impostare o caricare la visualizzazione

requestWindowFeature(Window.FEATURE_NO_TITLE); 
setContentView(R.layout.activity_main);

11

Nel tuo onCreatemetodo, utilizza il seguente frammento:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);

l'app inizia con il titolo e si nasconde, mostra mostra l'app senza titolo
Bachask8

10

Aggiungi entrambi quelli per il tema che usi:

    <item name="windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>

"Purtroppo YourApp si è fermata."
Chris Allinson,

<item name="windowActionBar">false</item>provoca l'arresto anomalo dell'applicazione. può essere questo il significato di
@ChrisAllinson

Non posso confermare Funziona bene per me.
sviluppatore Android il

10

Aggiungi questo stile al tuo file style.xml

 <style name="AppTheme.NoActionBar">
     <item name="windowActionBar">false</item>
     <item name="windowNoTitle">true</item>
 </style>

Dopodiché fai riferimento a questo nome di stile nel tuo androidManifest.xml nell'attività perticolare in cui non vuoi vedere la barra del titolo, come di seguito.

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

hai dimenticato il android:prefisso prima dei nomi nel tuo primo blocco di codice :)
Stam Kaly

8

Sto usando un widget di supporto Toolbar v7. Quindi, per poter eliminare o nascondere il titolo, dobbiamo scrivere questo.

Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);

//Remove¡ing title bar
getSupportActionBar().setDisplayShowTitleEnabled(false);

risposta perfetta
Asesha George,

7

O se vuoi nascondere / mostrare la barra del titolo in qualsiasi momento:

private void toggleFullscreen(boolean fullscreen)
{
    WindowManager.LayoutParams attrs = getWindow().getAttributes();
    if (fullscreen)
    {
        attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
    }
    else
    {
        attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
    }
    getWindow().setAttributes(attrs);
}

6

Nel mio caso, se stai usando Android Studio 2.1 e la tua versione compilata dell'SDK è 6.0, vai al tuo file manifest.xml e modifica il seguente codice:

Ecco il codice:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.lesterxu.testapp2">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.NoActionBar">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

Ed ecco lo snip shoot (vedi il codice di evidenziazione): inserisci qui la descrizione dell'immagine


Benvenuti in SO. Pubblica il tuo codice direttamente su SO piuttosto che pubblicare un'immagine del tuo codice.
Richard Erickson,

6

Questo ha risolto il mio problema

In manifest la mia attività:

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".SplashScreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

In stile sotto il nome "AppTheme":

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme"
        parent="Theme.AppCompat.Light.NoActionBar">
        **<item name="windowActionBar">false</item>
        <item name="android:windowNoTitle">true</item>**
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

6

Per nascondere sia la barra del titolo che quella dell'azione ho fatto questo:

Nel tag attività di Manifest:

android:theme="@style/AppTheme.NoActionBar"

In Activity.java prima di setContentView:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

vale a dire,

// Rimuovi la barra del titolo

this.requestWindowFeature (Window.FEATURE_NO_TITLE);

// Rimuovi la barra di notifica

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

NOTA : è necessario mantenere queste righe primasetContentView


Non ho molta esperienza in Java o nella creazione di app Android, quindi il tuo commento sul fatto che quelle righe di codice dovrebbero essere posizionate prima di setContentView è ciò che ha davvero aiutato! Grazie!
Kyle van Til,

5

La prima risposta è l'anfibolo. ecco la mia spiegazione: aggiungi:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);

nel metodo oncreate ().

prima:

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);

(non solo prima di setContentView) se non lo fai, ti ritroverai. +1 questa risposta.


4

Ho trovato due motivi per cui potrebbe verificarsi questo errore.

Uno. I flag Window sono già impostati all'interno, super.onCreate(savedInstanceState);nel qual caso potresti voler usare il seguente ordine di comandi:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);      

super.onCreate(savedInstanceState);

Due. Hai il pulsante Back / Up all'interno della barra del titolo, il che significa che l'attività corrente è figlia gerarchica di un'altra attività, nel qual caso potresti voler commentare o rimuovere questa riga di codice dall'interno del onCreatemetodo.

getActionBar().setDisplayHomeAsUpEnabled(true);

Grazie, mi ha aiutato a impostare NoTitle e FullScreen senza cambiare tema
Mohsen Afshin

4

Ecco come appare il codice completo. Nota l'importazione di android.view.Window.

package com.hoshan.tarik.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
    }
}

4

Aggiungi theme @ style / Theme.AppCompat.Light.NoActionBar nella tua attività su AndroidManifest.xml in questo modo

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

3

Se fai ciò che dicono gli utenti YaW e Doug Paul , devi tenere presente che le funzioni della finestra devono essere impostate prima di chiamare setContentView. In caso contrario, otterrai un'eccezione.


3

aggiungere nel file più modificabile,

  android:theme="@android:style/Theme.Translucent.NoTitleBar"

aggiungi la seguente riga nel tuo file java,

  this.requestWindowFeature(Window.FEATURE_NO_TITLE);

3

Sto usando Android Xamarin e questo ha funzionato per me.

SupportActionBar.Hide();
SetContentView(Resource.Layout.activity_main);
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.