Esta atividade já possui uma barra de ação fornecida pela decoração da janela


497

Tentando mover minhas coisas para usar em Toolbarvez da barra de ação, mas continuo recebendo um erro dizendo

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)

então adicionei no meu estilo para que minha atividade não tivesse barra de ação

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

e o tema se aplica a atividades no meu manifesto

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

MainActivity estende GooglePlayServiceActivity, então também defini o tema também

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

mas ainda recebo o erro. Eu também não solicito o recurso de janela em qualquer lugar. alguma idéia de por que eu ainda entendo isso?

Respostas:


836

Acho que você está desenvolvendo para o Android Lollipop, mas inclua esta linha:

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

à sua declaração de tema dentro da sua app/src/main/res/values/styles.xml.

Além disso, se você estiver usando a AppCompatActivitybiblioteca de suporte da versão 22.1 ou superior, adicione esta linha:

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

Sua declaração de tema pode ser assim depois de todas essas adições:

<!-- 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
windowActionBarnão é o mesmo que android:windowActionBar?
22414 tyczj

65
É verdade, mas o material AppCompat examina o atributo de espaço para nome do aplicativo e não o Android. Isso torna possível especificar o atributo mesmo em plataformas que não o possuíam originalmente. É assim que permite o backporting de coisas como colorPrimary.
yarian 24/10

5
Quando eu adicionei essa linha nos meus estilos do app falha :(
rkmax

9
Adicione também <item name = "windowNoTitle"> true </item> Se você estiver usando o AppCompatActivity após a biblioteca de suporte 22.1 stackoverflow.com/a/29853299/1402525
Nick

4
Não se esqueça de adicionar: android: theme = "@ style / AppTheme" à tag do aplicativo no arquivo de manifesto.
live-love

202

Outra maneira fácil é transformar seu tema em algo Theme.AppCompat.Light.NoActionBarassim:

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

Eu tentei esse método também, mas ainda recebi o erro. No entanto, que poderia ter sido antes de eu definir o tema para o meu GooglePlayServiceActivity, eu não lembro
tyczj

1
Sim, é isso que eu tenho usado. Apenas certifique-se de que a atividade esteja usando esse tema no manifesto
MrEngineer13

6
Acho essa solução mais elegante que a de @Nadir Belhaj, embora ambas estejam corretas.
voghDev

Eu acho que esta é a melhor resposta, usando o atributo XML inline (windowActionBar = false) não funcionou - Eu tenho mesmo erro que @tyczj
Booger

Nesse caso, você não pode usar Theme.AppCompat.Light.DarkActionBar, que na verdade é um pai útil.
F470071

125

Adicione uma única linha android:theme="@style/AppTheme.NoActionBar"ao activityin AndroidManifeste pronto.


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 a Barra de Ferramentas como uma Barra de Ação, primeiro desative a Barra de Ação fornecida pela decoração.

A maneira mais fácil é fazer com que seu tema se estenda de

Theme.AppCompat.NoActionBar

(ou sua variante leve).

Segundo, crie uma instância da barra de ferramentas, geralmente por meio do XML de layout:

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

Em sua Atividade ou Fragmento, defina a Barra de Ferramentas para atuar como sua Barra de Ação:

@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 funcionou para mim.


1
Obrigado! Eu esqueci de adicionar <android.support.v7.widget.Toolbarao XML.
CoolMind

1
Eu não conseguia entender por que a cor da minha barra de ferramentas estava em branco. Não conseguia descobrir como alterá-lo para verde. Eu me sinto boba, pois tudo que eu precisava fazer era colocar android: background = "" dentro de <android.support.v7.widget.Toolbar /> no arquivo de layout e foi o que aconteceu! . Obrigado
Andrew Irwin

22

Se você deseja combinar algumas atividades com a barra de ação e outras não, use o tema base com a barra de ação ativada e, em seguida, crie um subtema que você o usará em atividades que não exigem barra de ação

Por exemplo, você pode usar um sub-estilo como este

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

Enquanto o tema base se estende, diga

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

e use o tema não da barra de ação no arquivo AndroidManifest na tag de atividade, digamos

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

você deve aplicar isso a cada atividade individual que não precisa da barra de ação. Se o seu projeto exigir menos atividades da barra de ação do que não, é melhor aplicá-lo no nível do tema base


12

Eu também enfrentei o mesmo problema. Mas eu usei:

getSupportActionBar().hide();

antes

setContentView(R.layout.activity_main);

Agora está funcionando.

E podemos tentar outra opção no 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

Adicione isso em seus values ​​/ styles.xml

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

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

</style>

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

</style>

E adicione o seguinte código nos valores-v11 / styles.xml e values-v14 / styles.xml

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

</style>

É isso aí. Vai funcionar.


6

Você precisa mudar

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

essas linhas no manifesto. Funcionará perfeitamente para mim.


5

Vá para 'style.xml' do seu projeto e torne windowActionBar como false

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

13
Como você está ajudando outras pessoas quando a sua resposta não está correta em reguards à minha pergunta
tyczj

Em vez de usar "Theme.AppCompat.Light", use "Theme.AppCompat.Light.NoActionBar"
Christina

4

Adicione essas duas linhas no tema do seu aplicativo, localizado em 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

Eu tinha a barra de ferramentas adicionada no meu xml. Então, na minha atividade, eu estava adicionando esta declaração:

setSupportActionBar(toolbar);

Remover isso funcionou para mim. Eu espero que isso ajude alguém.


E se eu não quiser removê-lo? Ou seja, existem coisas que usam a barra de ferramentas.
Sreekanth Karumanaghat

Não tenho certeza, mas acho que remover este "setSupportActionBar (toolbar);" barra de ferramentas vai ficar lá.
Harry .Naeem

4

Se você receber o erro nesta linha:

setSupportActionBar(...);

Você precisa verificar se sua atividade está se referindo a um tema que contém uma barra de ferramentas. O AppTheme do seu aplicativo já pode conter uma barra de ferramentas, como

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

e você está tentando adicionar um segundo. Se você deseja usar o AppTheme do seu aplicativo, é necessário remover o tema da sua atividade, no arquivo manifest.xml.

Por exemplo:

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

4

Use isso dentro da tag do aplicativo no manifesto ou dentro da tag Activity.

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


3

Se você estiver usando o AppcompactActivity, use estas três linhas no seu tema.

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

2

Simplificando, você pode fazer o seguinte: -

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

Foi assim que resolvi o problema. Adicione o código abaixo em seuAndroidMainfest.xml

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

1
perfeito! Obrigado por compartilhar.
Sandeep Yohans

1

Ou simplesmente mude o @ Style / AppTheme

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

Isso funciona para mim!


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

Existem duas soluções simples e rápidas

vá para res -> valores -> estilos

Você também pode assistir a este vídeo para mais facilidade CLIQUE AQUI

Solução 1:

Você pode remover a barra de ação substituindo

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

para

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

Solution2:

Basta adicionar essas linhas

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

Então agora seu arquivo de estilo fica assim

`

<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

Eu resolvi removendo esta linha:

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

das propriedades da atividade no Manifest file


-2

Basta colocar parent="Theme.AppCompat.NoActionBar"no seu arquivo style.xml

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.