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?

tyczj
fonte

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

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

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

Prabhakaran
fonte
6

Você precisa mudar

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

essas linhas no manifesto. Funcionará perfeitamente para mim.

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

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

Harry .Naeem
fonte
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
amor ao vivo
fonte
4

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

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

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

    }
yash sachdeva
fonte
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>
John Joe
fonte
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!

Gaurav Bhagat
fonte
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
fonte
-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>

`

Muhammad Ali
fonte
-2

Eu resolvi removendo esta linha:

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

das propriedades da atividade no Manifest file

Flowra
fonte
-2

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

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

Md. Ibrahim
fonte