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?

tyczj
fuente

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>
Nadir Belhaj
fuente
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>
MrEngineer13
fuente
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>
Volodymyr Kulyk
fuente
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ó.

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

Nasz Njoka Sr.
fuente
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>
Thirumalvalavan
fuente
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á.

Prabhakaran
fuente
6

Necesitas cambiar

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

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

S HemaNandhini
fuente
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>
Asim Roy
fuente
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

Kailash Dabhi
fuente
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.

Harry. Naeem
fuente
¿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
vive el amor
fuente
4

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

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

Anirban
fuente
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>
Syed Hamza Hassan
fuente
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));

    }
Yash Sachdeva
fuente
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>
John Joe
fuente
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!

Gaurav Bhagat
fuente
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
Chinecherem Tina
fuente
-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>

``

Muhammad Ali
fuente
-2

Lo resolví eliminando esta línea:

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

de las propiedades de actividad en el Manifest file

Flowra
fuente
-2

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

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

MD Ibrahim
fuente