Cómo ocultar la barra de título para una Actividad en XML con un tema personalizado existente

876

Quiero ocultar la barra de título para algunas de mis actividades. El problema es que apliqué un estilo a todas mis actividades, por lo tanto, no puedo simplemente configurar el tema @android:style/Theme.NoTitleBar.

Usar el tema NoTitleBar como padre para mi estilo eliminaría la barra de título de todas mis actividades.

¿Puedo configurar un elemento de estilo sin título en alguna parte?

Janusz
fuente

Respuestas:

1065

Haz esto en tu onCreate()método.

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

thisse refiere a la Activity.

Guiñada
fuente
77
Gran respuesta. Sin embargo, no tiene que hacer ambas cosas, eliminar la barra de notificaciones puede ser excesivo.
Jim Blackler el
209
Asegúrese de ponerlo antes de la llamada a setContentView (R.id.x), de lo contrario se bloqueará. La razón no fue inmediatamente obvia para mí. 08-13 12: 47: 33.561 E / AndroidRuntime (9125): java.lang.RuntimeException: no se puede iniciar la actividad ComponentInfo {com.myapp / com.myapp.SplashActivity}: android.util.AndroidRuntimeException: requestFeature () debe llamarse antes de agregar contenido
mobibob
99
Realmente debería mencionar que cuando use requestWindowFeature (), se producirá un cierre forzado si ejecuta esta línea después de agregar cualquier contenido. Y en una nota lado, el método XML es mucho más seguro y también separa estructura de la página de su código, (que es el entero propósito de los XMLs en el primer lugar.)
b1nary.atr0phy
21
Esto no funciona con la API 22. Todavía veo la barra de título inicialmente cuando se inicia la aplicación.
user2966445
77
funciona si su actividad extiende la Actividad NO AppCompatActivity, es decir, su clase debe declararse como clase pública myActi extiende la Actividad {}
Manpreet Singh Dhillon el
523

Puedes modificar tu AndroidManifest.xml:

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

o úselo android:theme="@android:style/Theme.Black.NoTitleBar"si no necesita una actividad de pantalla completa.

Nota: Si ha usado una vista 'predeterminada' antes, probablemente también debería cambiar la clase primaria de AppCompatActivitya Activity.

Redax
fuente
1
No se porque. Solo utilicé el proyecto predeterminado y agregué una actividad. El autocompletado no funciona, pero el tema está ahí.
Redax
82
android:theme="@android:style/Theme.Black.NoTitleBar"es probablemente más útil a menos que estés haciendo un juego
Chris S
77
O <style name = "AppTheme" parent = "android: Theme.Light.NoTitleBar" /> para iluminar el tema.
Fernando JS
20
No sé por qué, pero esto está bloqueando mi aplicación. ¿Alguna ayuda?
Akeshwar Jha
12
@Akeshwar: es posible que tenga que meterse con su archivo styles.xml. Por ejemplo, cambie <style name = "AppTheme" parent = "Theme.AppCompat.Light.DarkActionBar"> a <style name = "AppTheme" parent = "Theme.AppCompat.Light.NoActionBar">. Si hace eso, no necesita cambiar su archivo AndroidManifest.xml. (También estaba sufriendo el accidente, hasta que solucioné esto).
Brit Clousing
385

Ahora hice lo siguiente.

Declaré que un estilo heredaba todo de mi estilo general y luego deshabilitaba la barra de título.

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

Ahora puedo configurar este estilo para cada Actividad en la que quiero ocultar la barra de título sobrescribiendo el estilo de la aplicación y heredando todas las demás informaciones de estilo, por lo que no hay duplicación en el código de estilo.

Para aplicar el estilo a una Actividad particular, abra AndroidManifest.xmly agregue el siguiente atributo a la activityetiqueta;

<activity
    android:theme="@style/generalnotitle">
Janusz
fuente
13
Creo que creó un estilo llamado "general" y lo está extendiendo. Simplemente quítelo para su propio uso.
rcl
77
+1 por responder la pregunta, en lugar de solo especificar la forma más obvia de lograr resultados similares, como lo hacen la mayoría de las otras respuestas en esta pregunta. Es una pena que haya tenido que responder a su propia pregunta para obtener una respuesta precisa ...
Jules
1
esta respuesta es la mejor. Incluso puedes usar cualquier otro tema proporcionado por Android sin barra de título. Muchas gracias por compartir
Narendra Pal
44
Creo que esta es una solución más elegante que la programática this.requestWindowFeature (Window.FEATURE_NO_TITLE); porque en este caso todavía se puede ver un "parpadeo" del título
abovesun
1
La mejor respuesta a la pregunta de OP :) Pero aún así eso no elimina la barra de título de mi actividad (API19)
1111161171159459134
166

No me gusta this.requestWindowFeature(Window.FEATURE_NO_TITLE);porque la barra de título aparece brevemente y luego desaparece.

Tampoco me gusta android:theme="@android:style/Theme.NoTitleBar"porque perdí todos los cambios de Holo 3.0+ a los que los usuarios de los nuevos dispositivos se han acostumbrado. Entonces encontré esta solución.

En su carpeta res / values, cree un archivo llamado styles.xml (si aún no existe). En ese archivo coloque el siguiente código:

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

A continuación, cree un res / values-v11 con otro archivo styles.xml (una vez más, esto ya puede existir). En ese archivo coloque el siguiente código:

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

Y si está apuntando a 4.0+, cree una carpeta res / values-v14 con otro archivo styles.xml (sí, puede que ya esté allí). En ese archivo coloque el siguiente código:

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

Finalmente, con todos estos archivos creados, abra su archivo AndroidManifiest.xml , puede agregar el código:

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

a la etiqueta de actividad de la actividad para la que no desea título o la etiqueta de la aplicación si desea que se aplique a toda la aplicación.

Ahora sus usuarios obtendrán los temas asociados con la versión de su dispositivo con el diseño de pantalla que desee.

PD Cambiar el valor a android:theme="@style/Theme.FullScreen"tendrá el mismo efecto, pero también eliminará la barra de notificaciones.

Devin Stewart
fuente
Ellos ... esto funciona bien para lo que has dicho, pero las imágenes se chillaron al cambiar los temas. Entonces lo que hay que hacer ???
Arun
1
@arun: no he tenido ningún problema de imagen con este método. ¿Qué quieres decir con chillido?
Devin Stewart
1
La mejor respuesta ... this.requestWindowFeature (Window.FEATURE_NO_TITLE); no es adecuado y <item name = "android: windowNoTitle"> true </item> perdió el tema original ... Gracias @DevinStewart ... acepte +1 por su explicación :)
lynndragon
55
Ah, tonto yo! Estaba usando ActionBarActivity, ¡lo cual no tiene sentido si quieres QUITAR LA BARRA DE ACCIÓN! Cambiar a una actividad simple o FragmentActivity permite que esta buena solución funcione de maravilla.
Scott Biggs
1
"Desafortunadamente, YourApp se ha detenido".
Chris Allinson
104

La barra de título se puede eliminar de dos maneras, como se menciona en la página de Android del desarrollador:

En el manifest.xmlarchivo:

  1. Agregue lo siguiente applicationsi desea eliminarlo de todas las actividades en una aplicación:

    <application android:theme="@android:style/Theme.Black.NoTitleBar">
  2. O para una actividad particular:

    <activity android:theme="@android:style/Theme.Black.NoTitleBar">
Sombra blanca
fuente
15
Es mejor usar android: theme = "@ android: style / Theme.DeviceDefault.NoActionBar.Fullscreen" en lugar de black.theme. Deje que el dispositivo maneje el tema. pero gracias, usé tu enfoque
Varand Pezeshkian
54

la respuesta correcta probablemente es no extender ActionbarActivity en lugar de extender solo Activity


si todavía usa la actividad de la barra de acción parece que esto está funcionando:

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

Parece que esto también funciona:

styles.xml:

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

Podría hacer lo que Scott Biggs escribió. Este tipo de obras. excepto que no hay tema entonces. Me refiero a que el fondo del menú de configuración es transparente:

solo cambia

public class MainActivity extends ActionBarActivity {

a actividad o fragmento de actividad

public class MainActivity extends Activity  {

sin embargo, podría hacer que se vea lo suficientemente bien usando el diseño del material y no eliminar la barra de acción: https://gist.github.com/shimondoodkin/86e56b3351b704a05e53

  1. establecer icono de aplicación
  2. Establecer colores de la barra de acción para que coincida con el diseño.
  3. establecer icono en el menú de configuración
  4. agregar más íconos (botones en la parte superior)

es, por ejemplo, el diseño de materiales de la barra de acción de estilo de compatibilidad.

Shimon Doodkin
fuente
44
¡Cambiar el ActionBarActivity a Activity hizo el truco para mí!
DritanX
44

lo que funciona para mi

1- en styles.xml:

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

2- en MainActivity

@Override
protected void onCreate(Bundle savedInstanceState) {          
    super.onCreate(savedInstanceState);
    getSupportActionBar().hide(); //<< this
    setContentView(R.layout.activity_main);
}
  1. en manifiesto hereda el estilo:

    <activity android:name=".MainActivity" android:theme="@style/generalnotitle">
Flowra
fuente
Como se describió anteriormente, a veces no funciona desde xml. No sé por qué exactamente, no estoy completamente seguro, pero getSupportActionBar().hide();dentro de onCreate () {} hará el trabajo
ZeePee
43

Si usa el this.requestWindowFeature(Window.FEATURE_NO_TITLE)usuario, aún podrá ver la barra de título solo por un momento durante la animación de inicio cuando comience la actividad onCreate. Si usa @android:style/Theme.Black.NoTitleBarcomo se muestra a continuación, la barra de título no se mostrará durante la animación de inicio.

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

el ejemplo anterior obviamente anulará el tema de su aplicación existente, si tiene un tema existente, agréguelo <item name="android:windowNoTitle">true</item>.

raj c
fuente
Mi actividad es de instancia única con @android: style / Theme.Black.NoTitleBar, pero el uso de este código funcionará cuando se cree la actividad por primera vez como se conoce la actividad SingleInstance y luego nuevamente no se creó, así que solo use el método OnNewItent, pero ahora mi problema es cuando se muestra la actividad es solo Mostrar barra de estado durante 4 segundos. Cómo puedo salir de esto. Aquí está mi pregunta Enlace es stackoverflow.com/questions/9308767/…
Herry
29

cuando traté de usar todas esas respuestas elevadas, mi aplicación siempre fallaba. (Creo que tiene algo que ver con el "@android: estilo"?)

La mejor solución para mí fue usar lo siguiente:

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

Ya no hay encabezado / barra de título. Simplemente colóquelo en <application>...</application>o <activity>...</activity>dependiendo de si (no) lo quiere en toda la aplicación o solo en una actividad específica.

TryToSolveItSimple
fuente
Esta es la mejor manera (¿o la única forma?) ¡Si la aplicación "extiende AppCompatActivity"!
Ferrarezi
17

Crea un tema de la siguiente manera.

 <!-- 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>
arenoso
fuente
16

Añadir

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

dentro de AppTheme (styles.xml)

nijas
fuente
15

Solo utilícelo getActionBar().hide();en su onCreate()método de actividad principal .

Anas Al Hamdan
fuente
14

Solo necesita cambiar el AppThemeestilo en Style.xml si reemplaza la definición deDarkActionBar

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

a NoActionBar

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

el AppTheme definido en AndroidManifast.xml

Daniel Levi
fuente
14

Para AppCompat, la siguiente solución funcionó para mí:

Agregue un nuevo estilo de tema sin barra de acción en su styles.xmlconjunto 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>


Ahora implemente el mismo estilo de tema para su actividad de pantalla de bienvenida en 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>

Aquí está el resultado:

ingrese la descripción de la imagen aquí

Krunal
fuente
11

Puedes usar este código en tu archivo java

agregue esta línea antes de configurar o cargar su vista

requestWindowFeature(Window.FEATURE_NO_TITLE); 
setContentView(R.layout.activity_main);
Aneh Thakur
fuente
11

En su onCreatemétodo, use el siguiente fragmento:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
Mahesh
fuente
la aplicación comienza con el título y se oculta, muestra mostrar la aplicación sin título
Bachask8
10

Agregue ambos para el tema que usa:

    <item name="windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>
desarrollador de Android
fuente
"Desafortunadamente, YourApp se ha detenido".
Chris Allinson
<item name="windowActionBar">false</item>hace que la aplicación se bloquee. puede ser esto lo que @ChrisAllinson quiso decir
Mubashar
No puedo confirmar Funciona bien para mi.
desarrollador de Android
10

Agregue este estilo a su archivo style.xml

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

Después de eso, haga referencia a este nombre de estilo en su androidManifest.xml en una actividad particular en la que no desea ver la barra de título, como se muestra a continuación.

<activity android:name=".youractivityname"
     android:theme="@style/AppTheme.NoActionBar">
</activity>
Ninguno
fuente
olvidó el android:prefijo antes de los nombres en su primer bloque de código :)
Stam Kaly
8

Estoy usando un widget de soporte Toolbar v7. Entonces, para poder eliminar u ocultar el Título, necesitamos escribir esto.

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

//Remove¡ing title bar
getSupportActionBar().setDisplayShowTitleEnabled(false);
MontDeska
fuente
Respuesta perfecta.
Asesha George
7

O si desea ocultar / mostrar la barra de título en cualquier 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);
}
cprcrack
fuente
6

En mi caso, si está usando Android Studio 2.1 y su versión de compilación SDK es 6.0, simplemente vaya a su archivo manifest.xml y cambie el siguiente código:

Aquí está el código:

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

Y aquí está la sesión de recorte (ver el código de resaltado): ingrese la descripción de la imagen aquí

Lester
fuente
Bienvenido a SO. Publique su código directamente en SO en lugar de publicar una imagen de su código.
Richard Erickson
6

Esto resolvió mi problema

En manifiesto mi actividad:

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

En estilo bajo el nombre "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>
Sam
fuente
6

Para ocultar tanto la barra de título como la de acción, hice esto:

En la etiqueta de actividad del Manifiesto:

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

En Activity.java antes de setContentView:

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

es decir,

// Eliminar barra de título

this.requestWindowFeature (Window.FEATURE_NO_TITLE);

// Eliminar barra de notificaciones

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

NOTA : debe mantener estas líneas antessetContentView

Shylendra Madda
fuente
No tengo mucha experiencia en Java o en la creación de aplicaciones de Android, por lo que su comentario de que esas líneas de código deben ubicarse antes de setContentView es lo que realmente ayudó. ¡Gracias!
Kyle van Til
5

La primera respuesta es anfíbol. Aquí está mi explicación: agregar:

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

en el método oncreate ().

antes de:

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

(no solo antes de setContentView) si no haces esto, obtendrás forceclose. +1 esta respuesta.

David
fuente
4

Encontré dos razones por las que podría ocurrir este error.

Uno. Los indicadores de la ventana ya están configurados dentro, super.onCreate(savedInstanceState);en cuyo caso es posible que desee utilizar el siguiente orden de comandos:

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

super.onCreate(savedInstanceState);

Dos. Tiene el botón Atrás / Arriba dentro de la barra de título, lo que significa que la actividad actual es un elemento jerárquico de otra actividad, en cuyo caso es posible que desee comentar o eliminar esta línea de código dentro del onCreatemétodo.

getActionBar().setDisplayHomeAsUpEnabled(true);
Dzhuneyt
fuente
Gracias, me ayudó a configurar NoTitle y FullScreen sin cambio de tema
Mohsen Afshin
4

Así es como se ve el código completo. Tenga en cuenta la importación de 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);
    }
}
Tarik
fuente
4

Agregue theme @ style / Theme.AppCompat.Light.NoActionBar en su actividad en AndroidManifest.xml como este

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

Si hace lo que dicen los usuarios YaW y Doug Paul , debe tener en cuenta que las características de la ventana deben configurarse antes de llamar a setContentView. Si no, obtendrá una excepción.

fergerm
fuente
3

agregar en múltiples archivos,

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

agregue la siguiente línea en su archivo java,

  this.requestWindowFeature(Window.FEATURE_NO_TITLE);
Kunal Dharaiya
fuente
3

Estoy usando Android Xamarin y esto funcionó para mí.

SupportActionBar.Hide();
SetContentView(Resource.Layout.activity_main);
jase
fuente