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




html activity (25)

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 .

L'utilizzo del tema NoTitleBar come genitore per il mio stile rimuoveva la barra del titolo da tutte le mie attività.

Posso impostare un elemento stile titolo da qualche parte?


Answers

Per AppCompat , la soluzione seguente ha funzionato per me:

Aggiungi un nuovo stile tema senza barra delle azioni in styles.xml e 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 di 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:


Ora ho fatto quanto segue.

Ho dichiarato uno stile che eredita tutto dal mio stile generale e poi disabilitando il titoloBar.

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

Ora posso impostare questo stile per ogni attività in cui voglio nascondere la barra del titolo sovrascrivendo lo stile dell'applicazione e ereditando tutte le altre informazioni di stile, quindi non c'è alcuna duplicazione nel codice di stile.

Per applicare lo stile a una determinata attività, apri AndroidManifest.xml e aggiungi il seguente attributo al tag activity ;

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

Fai questo nel 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 Activity .


Se fai quello che dicono gli utenti YaW e Doug Paul , allora devi ricordare che le funzioni della finestra devono essere impostate prima di chiamare setContentView. In caso contrario, riceverai un'eccezione.


Se si utilizza l'utente 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 quando l'attività inizia con onCreate . Se si utilizza @android:style/Theme.Black.NoTitleBar come 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 ovviamente sostituirà il tema dell'applicazione esistente, se hai un tema esistente quindi aggiungi <item name="android:windowNoTitle">true</item> ad esso.


Basta usare getActionBar().hide(); nel tuo metodo onCreate() .


Aggiungi questo stile al tuo file style.xml

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

Dopo aver fatto riferimento a questo nome di stile nel tuo androidManifest.xml in attività perticulari in cui non vuoi vedere la barra del titolo, come di seguito.

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

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

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

Ahem, puoi applicare temi alle singole attività in XML come nessun titolo. In altre parole, estrailo dal tag dell'applicazione, apri la dichiarazione tag e inseriscila nel tag attività desiderato.


La prima risposta è 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 rimprovererà. +1 questa risposta.


Puoi usare questo codice nel tuo file java

aggiungi questa linea prima di impostare o caricare la tua vista

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

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>

la risposta corretta probabilmente non è estendere ActionbarActivity piuttosto estendere solo Activity

se usi ancora la actionbar 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 ha scritto Scott Biggs. questo tipo di opere. tranne che non esiste un tema allora. Voglio dire che lo sfondo del menu delle impostazioni è trasparente:

basta cambiare

public class MainActivity extends ActionBarActivity {

ad attività o FragmentActivity

public class MainActivity extends Activity  {

tuttavia potrei farlo sembrare abbastanza buono usando il material design e non rimuovere la barra di azione: https://gist.github.com/shimondoodkin/86e56b3351b704a05e53

  1. imposta l'icona dell'applicazione
  2. imposta i colori della barra delle azioni per abbinare il design.
  3. imposta l'icona sul menu delle impostazioni
  4. aggiungi altre icone (pulsanti in alto)

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


Nel tuo metodo onCreate , utilizza il seguente snippet:

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

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

Nel file manifest.xml :

  1. Aggiungi il seguente application se 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">
    

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

aggiungi un file più maneggevole,

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

aggiungi la seguente riga nel tuo file java,

  this.requestWindowFeature(Window.FEATURE_NO_TITLE);

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

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

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

Ho trovato due ragioni per cui questo errore potrebbe verificarsi.

Uno. I flag Window sono già impostati all'interno di super.onCreate(savedInstanceState); in tal caso potresti voler 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 all'interno della barra del titolo, il che significa che l'attività corrente è un figlio gerarchico di un'altra attività, nel qual caso potresti voler commentare o rimuovere questa linea di codice dal metodo onCreate .

getActionBar().setDisplayHomeAsUpEnabled(true);

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

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

a NoActionBar

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

l'AppTema definito in AndroidManifast.xml


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 hai già utilizzato una vista 'predefinita', probabilmente dovresti anche cambiare la classe genitore da AppCompatActivity ad Activity .


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 eredita lo stile:

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

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

Nel mio caso, se si utilizza Android Studio 2.1 e la versione di SDK compilata è 6.0, basta andare sul 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>

Ed ecco lo snip shoot (vedi il codice highlight):


In questo post del blog dello sviluppatore di Google Jose Alcérreca si consiglia di utilizzare una trasformazione in questo caso (consultare il paragrafo "LiveData nei repository").





android android-layout titlebar