Esta actividad ya tiene una barra de acción proporcionada por la decoración de la ventana


497

Intento mover mis cosas para usarlas en Toolbarlugar de la barra de acción, pero sigo recibiendo un error que dice

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tyczj.weddingalbum/com.xxx.xxx.MainActivity}: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5039)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
            at android.support.v7.app.ActionBarActivityDelegateBase.setSupportActionBar(ActionBarActivityDelegateBase.java:165)
            at android.support.v7.app.ActionBarActivity.setSupportActionBar(ActionBarActivity.java:92)
            at com.xxx.xxx.MainActivity.onCreate(MainActivity.java:113)
            at android.app.Activity.performCreate(Activity.java:5104)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5039)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            at dalvik.system.NativeStart.main(Native Method)

entonces agregué mi estilo para que mi actividad no tuviera barra de acción

<style name="AppCompatTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:windowActionBar">false</item>
</style>

y el tema se aplica a las actividades en mi manifiesto

<activity
        android:name=".MainActivity"
        android:windowSoftInputMode="adjustResize|stateHidden"
        android:theme="@style/AppCompatTheme" android:screenOrientation="portrait"/>

MainActivity extiende GooglePlayServiceActivity, así que también configuré el tema allí

<activity
       android:name=".GooglePlayServicesActivity"
       android:label="@string/title_activity_google_play_services"
       android:theme="@style/AppCompatTheme">

pero sigo recibiendo el error Tampoco solicito la función de ventana en ningún lado. alguna idea de por qué sigo teniendo esto?

Respuestas:


836

Creo que está desarrollando para Android Lollipop, pero de todos modos incluya esta línea:

<item name="windowActionBar">false</item> 

a su declaración de tema dentro de su app/src/main/res/values/styles.xml.

Además, si está utilizando la AppCompatActivitybiblioteca de soporte de la versión 22.1 o superior, agregue esta línea:

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

Su declaración de tema puede verse así después de todas estas adiciones:

<!-- 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>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

18
windowActionBarno es lo mismo que android:windowActionBar?
tyczj

65
Lo es, pero las cosas de AppCompat miran el atributo del espacio de nombres de la aplicación, no el de Android. Esto hace posible especificar el atributo incluso en plataformas que originalmente no lo tenían. Es cómo permite el backporting de cosas como colorPrimary.
yarian

55
Cuando agregué esa línea en mis estilos, la aplicación se bloqueó :(
rkmax

99
Agregue también <item name = "windowNoTitle"> true </item> Si está usando AppCompatActivity después de 22.1 biblioteca de soporte stackoverflow.com/a/29853299/1402525
Nick

44
No olvide agregar: android: theme = "@ style / AppTheme" a la etiqueta de la aplicación en el archivo de manifiesto.
live-love

202

Otra forma fácil es hacer que su tema sea un niño de esta Theme.AppCompat.Light.NoActionBarmanera:

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

También probé este método pero aún recibí el error. Sin embargo, que podría haber sido antes de fijar el tema a mi GooglePlayServiceActivity, no recuerdo
tyczj

1
Sí, esto es lo que he estado usando. Solo asegúrese de que la actividad esté usando este tema en el manifiesto
MrEngineer13

66
Encuentro esta solución más elegante que la de @Nadir Belhaj, aunque ambas son correctas.
voghDev

Creo que esta es la mejor respuesta, el uso del atributo XML en línea (windowActionBar = false) no funcionó - Obtuve el mismo error que @tyczj
Booger

En ese caso, no puede usar Theme.AppCompat.Light.DarkActionBar, que en realidad es un padre útil.
f470071

125

Añadir sola línea android:theme="@style/AppTheme.NoActionBar"a activityen AndroidManifesty que ha hecho.


AndroidManifest.xml :

<activity android:name=".activity.YourActivity"
          android:theme="@style/AppTheme.NoActionBar"><!-- ADD THIS LINE -->

styles.xml

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

52

Para usar la barra de herramientas como una barra de acción, primero desactive la barra de acción proporcionada por la decoración.

La forma más fácil es hacer que su tema se extienda desde

Theme.AppCompat.NoActionBar

(o su variante ligera).

En segundo lugar, cree una instancia de la barra Google, generalmente a través de su diseño XML:

<android.support.v7.widget.Toolbar
    android:id=”@+id/my_awesome_toolbar”
    android:layout_height=”wrap_content”
    android:layout_width=”match_parent”
    android:minHeight=”?attr/actionBarSize”
    android:background=”?attr/colorPrimary” />

Luego, en su Actividad o Fragmento, configure la Barra de herramientas para que actúe como su Barra de acción:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.blah);

    Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
    setSupportActionBar(toolbar);
}

Este código me funcionó.


1
¡Gracias! Olvidé agregar <android.support.v7.widget.Toolbara XML.
CoolMind

1
No pude entender por qué el color de mi barra de herramientas estaba en blanco. Parece que no puede encontrar la manera de cambiarlo a verde. Me siento tonto ya que todo lo que tenía que hacer era poner android: background = "" dentro del <android.support.v7.widget.Toolbar /> en el archivo de diseño y ¡eso fue todo! . Gracias
Andrew Irwin

22

Si desea combinar algunas actividades con la barra de acción y otras no, debe usar el tema base que tiene la barra de acción habilitada y luego crear un subtema que lo usará en actividades que no requieren barra de acción

Por ejemplo, puede usar un subestilo como este

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

Mientras el tema base se extiende, digamos

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

y luego use el tema sin barra de acción en el archivo AndroidManifest dentro de la etiqueta de actividad, por ejemplo

   <activity
        android:name="com.example.NonActionBarActivity"
        android:theme="@style/AppTheme.NoActionBar"

debe aplicar esto a cada actividad individual que no necesita barra de acción, por lo que si su proyecto requiere menos actividades de barra de acción que no, entonces es mejor aplicar esto en el nivel de tema base


12

También me enfrenté al mismo problema. Pero yo solía:

getSupportActionBar().hide();

antes de

setContentView(R.layout.activity_main);

Ahora esta funcionando.

Y podemos probar otra opción en Style.xml ,

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

8

Agregue esto en sus valores / styles.xml

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

<style name="AppBaseTheme" parent="YourCustomTheme">

</style>

<style name="AppTheme" parent="AppBaseTheme">

</style>

Y agregue el siguiente código en su values-v11 / styles.xml y values-v14 / styles.xml

<style name="AppBaseTheme" parent="YourCustomTheme">

</style>

Eso es. Funcionará.


6

Necesitas cambiar

  <activity
        android:name=".YOUR ACTIVITY"
        android:theme="@style/AppTheme.NoActionBar" />
</application>`

estas líneas en el manifiesto. Funcionará perfectamente para mí.


5

Vaya al 'style.xml' de su proyecto y haga que windowActionBar sea falso

<style name="AppCompatTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:windowActionBar">false</item>
</style>

13
¿Cómo estás ayudando a otros cuando su respuesta no es correcta en reguards a mi pregunta
tyczj

En lugar de usar "Theme.AppCompat.Light", use "Theme.AppCompat.Light.NoActionBar"
Christina

4

Agregue estas dos líneas en el tema de su aplicación ubicado en style.xml: -

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

    //Add this two line will fix your problem
    <item name="windowNoTitle">true</item>   <--1(this applies after 22.0.1 support library i think 
    <item name="windowActionBar">true</item> <--2


4

Tenía barra de herramientas agregada en mi xml. Luego, en mi actividad, estaba agregando esta declaración:

setSupportActionBar(toolbar);

Eliminar esto funcionó para mí. Espero que esto ayude a alguien.


¿Qué pasa si no quiero eliminarlo? Es decir, hay cosas que usan la barra de herramientas.
Sreekanth Karumanaghat

No estoy seguro, pero creo que eliminar este "setSupportActionBar (barra de herramientas)"; la barra de herramientas permanecerá allí.
Harry .Naeem

4

Si obtiene el error en esta línea:

setSupportActionBar(...);

Debe verificar si su actividad se refiere a un tema que contiene una barra de herramientas. El AppTheme de su aplicación ya puede contener una barra de herramientas, como

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

e intentas agregar una segunda. Si desea utilizar el AppTheme de su aplicación, debe eliminar el tema de su actividad, en el archivo manifest.xml.

Por ejemplo:

<activity
    android:name=".ui.activities.SettingsActivity"
    android:theme="@style/AppTheme1" /> --> remove this theme

4

Use esto dentro de su etiqueta de aplicación en manifiesto o dentro de su etiqueta de Actividad.

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


3

Si está utilizando AppcompactActividad, use estas tres líneas en su tema.

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

2

En pocas palabras, puede hacer lo siguiente: -

if (android.os.Build.VERSION.SDK_INT >= 21) {
        Window window = getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.setStatusBarColor(getResources().getColor(R.color.colorPrimaryDark));

    }

2

Así es como resolví el problema. Agregue el siguiente código en suAndroidMainfest.xml

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

1
¡Perfecto! Gracias por compartir.
Sandeep Yohans

1

O simplemente cambie el @ Style / AppTheme

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">

Esto funciona para mi!


0
 <style name="AppCompatTheme" parent="@style/Theme.AppCompat.Light">
            <item name="android:windowActionBar">false</item>
    </style>

    Change this to NoActionBar 

        <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
            <!-- Customize your theme here. -->

        </style>

    This one worked for me

-1

Hay dos soluciones simples y rápidas.

ir a res -> valores -> estilos

TÚ también puedes ver este video para mayor facilidad HAGA CLIC AQUÍ

Solución 1:

Puede eliminar la barra de acción reemplazando

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

a

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

Solución2:

Simplemente agregue estas líneas

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

Así que ahora tu archivo de estilo se ve así

``

<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>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>

</style>

``


-2

Lo resolví eliminando esta línea:

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

de las propiedades de actividad en el Manifest file


-2

Simplemente ponga parent="Theme.AppCompat.NoActionBar"su archivo style.xml

Me gusta - <style parent="Theme.AppCompat.NoActionBar" name="AppTheme.NoActionBar">

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.