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

StackOverflow https://stackoverflow.com/questions/2591036

Domanda

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 impostarne il tema @android:style/Theme.NoTitleBar.

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

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

È stato utile?

Soluzione 3

Ora fatto la seguente.

I dichiarò uno stile che eredita tutto dal mio stile generale e quindi disattivando la barra del titolo.

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

Ora posso impostare questo stile ad ogni attività in cui voglio nascondere la barra del titolo di sovrascrivere lo stile ampia applicazione e ha ereditato tutte le altre informazioni di stile, Perciò nessuna duplicazione nel codice di stile.

Per applicare lo stile ad una particolare attività, AndroidManifest.xml aperto e aggiungere il seguente attributo al tag activity;

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

Altri suggerimenti

Fate questo in tuo metodo onCreate().

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

this riferisce al Activity.

È possibile modificare la AndroidManifest.xml:

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

o l'uso android:theme="@android:style/Theme.Black.NoTitleBar" se non è necessario un fullscreen attività.

Nota. Se avete usato una vista 'default' prima, probabilmente dovrebbe anche cambiare la classe padre da AppCompatActivity a Activity

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

Anche io non come il android:theme="@android:style/Theme.NoTitleBar" perché ho perso tutto il 3.0 + Holo cambiamenti che gli utenti dei nuovi dispositivi sono abituati a. Così mi sono imbattuto in questa soluzione.

i tuoi res / valori cartella rendono un file chiamato styles.xml (Se non esiste già). In quel luogo il file 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>

Avanti creare un res / valori-V11 con un altro file styles.xml (Ancora una volta questo può essere già esistente). In quel luogo il file 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 si prendono di mira 4.0+, creare un res / valori-V14 la cartella con l'ennesimo styles.xml file (Si potrebbe già essere lì). In quel luogo il file 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, aprire la AndroidManifiest.xml file, è possibile aggiungere il codice:

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

al tag attività della attività che si desidera senza titolo per il tag o applicazione se si desidera applicare per l'intera applicazione.

Ora gli utenti avranno i temi connessi con la loro versione dispositivo con la schermata di layout desiderato.

P.S. La modifica del valore di android:theme="@style/Theme.FullScreen" avrà lo stesso effetto, ma anche rimuovere barra di notifica.

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

Nel file manifest.xml:

  1. Aggiungere il seguente in application se si desidera rimuovere per tutte le attività in un'applicazione:

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

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

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


se si utilizza ancora ActionBar attività Sembra che questo sta lavorando:

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

Sembra che questa funziona troppo:

styles.xml:

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

ho potuto fare come come ha scritto Scott Biggs. questo tipo di opere. Tranne che non c'è nessun tema allora. Voglio dire sfondo del menu di impostazioni è trasparente:

solo cambiamento

public class MainActivity extends ActionBarActivity {

per attività o FragmentActivity

public class MainActivity extends Activity  {

Tuttavia ho potuto far sembrare abbastanza buono usando il disegno materiale e non rimuovere l'ActionBar: https://gist.github.com/shimondoodkin/86e56b3351b704a05e53

  1. set di icone di applicazione
  2. set colori della barra delle operazioni per abbinare il design.
  3. set di icone al menu impostazioni
  4. aggiungere ulteriori icone (pulsanti sulla parte superiore)

è per esempio di disegno materiale compatibilità ActionBar styling.

Se si utilizza utente this.requestWindowFeature(Window.FEATURE_NO_TITLE) sarà ancora in grado di vedere la barra del titolo solo per un momento durante l'animazione del lancio in cui l'attività si avvia attraverso onCreate. Se si utilizza @android:style/Theme.Black.NoTitleBar come mostrato di seguito, allora barra del titolo non verrà mostrato durante l'animazione di avvio.

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

sopra esempio sarà ovviamente ignorare il tema dell'applicazione esistente, se si è già esistente tema quindi aggiungere <item name="android:windowNoTitle">true</item> ad esso.

ciò che 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. nel manifesto ereditare lo stile:

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

quando ho provato ad utilizzare tutte quelle alte risposte upvoted mio app sempre si è schiantato. (Credo che abbia qualcosa a che fare con la? "@Android: style")

La soluzione migliore per me è stato quello di utilizzare il seguente:

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

Nessuna intestazione / titolo più. Basta posizionarlo nella <application>...</application> o <activity>...</activity> a seconda se (non) vuole che in tutta l'app o solo una specifica attività.

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

Add

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

all'interno AppTheme (styles.xml)

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

Hai solo bisogno di cambiare stile AppTheme in Style.xml se si sostituisce la definizione da DarkActionBar

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

per NoActionBar

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

l'AppTheme definito in AndroidManifast.xml

Per AppCompat, seguente soluzione ha funzionato per me:

Aggiungi nuovo stile tema con nessuna barra di azione nella vostra styles.xml e set 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 implementare lo stesso stile tema per la vostra attività splash screen 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 risultato:

 entrare descrizione dell'immagine qui

Puoi utilizzare questo codice nel tuo file Java

aggiungi questa riga prima di impostare o caricare la vista

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

Nel tuo metodo onCreate, utilizzare il seguente frammento di codice:

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

Aggiungi sia di quelli per il tema si utilizza:

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

Aggiungi questo stile al vostro file style.xml

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

Dopo che il riferimento questo nome dello stile nella vostra AndroidManifest.xml nell'attività perticular in cui non si vuole vedere la barra del titolo, come come qui di seguito.

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

Se si desidera 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);
}

Io sto usando un supporto widget Toolbar V7. Così, al fine di essere in grado di eliminare o nascondere il titolo abbiamo bisogno di scrivere questo.

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

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

Nel mio caso, se si utilizza Android 2.1 in studio, e la versione SDK di compilazione è 6.0, quindi basta andare al file manifest.xml, e modificare 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>

E qui è la germoglio snip (vedere il codice highlight): entrare image description qui

Questo risolto il problema

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

Per nascondere sia la barra del titolo che quella delle azioni 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);

cioè.,

//Rimuove la barra del titolo

this.requestWindowFeature(Window.FEATURE_NO_TITLE);

//Rimuove la barra delle notifiche

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

NOTA:È necessario mantenere queste righe prima setContentView

Per prima risposta è anfiboli. Ecco la mia spiegare: aggiungere:

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

in OnCreate () metodo.

prima

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

(non solo prima del setContentView) se non fare questo u otterrà forceclose. +1 questa risposta.

Ho trovato due ragioni per cui si potrebbe verificare questo errore.

Un Le bandiere finestra vengono impostati già impostati all'interno super.onCreate(savedInstanceState); nel qual caso si consiglia di utilizzare 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 Indietro / Su dentro la barra del titolo, il che significa che l'attività corrente è un bambino gerarchico di un'altra attività, nel qual caso si potrebbe desiderare di commento o rimuovere questa linea di codice all'interno del metodo onCreate.

getActionBar().setDisplayHomeAsUpEnabled(true);

In questo modo l'aspetto del codice completo piace. Si noti 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);
    }
}

Aggiungi tema @ stile / Theme.AppCompat.Light.NoActionBar nella vostra attività sul AndroidManifest.xml come questo

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

Se fai ciò che users YaW E Douglas Paolo diciamo, allora devi tenere presente che le funzionalità della finestra devono essere impostate prima di chiamare setContentView.In caso contrario, riceverai un'eccezione.

aggiuntivo nel file di manifiest,

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

aggiungere seguente riga nel file java,

  this.requestWindowFeature(Window.FEATURE_NO_TITLE);

Ahem, è possibile applicare i temi a singole attività in XML come l'assenza di titolo. In altre parole, prendere dal tuo tag applicazione, aprire la dichiarazione di tag e metterlo nel tag attività desiderata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top