このアクティビティには、ウィンドウ装飾によって提供されるアクションバーが既にあります


497

Toolbarアクションバーの代わりに使用するものの上に移動しようとすると、エラーメッセージが表示され続ける

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)

それで私は自分の活動にアクションバーがないように自分のスタイルを追加しました

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

テーマは私のマニフェストのアクティビティに適用されます

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

MainActivityはGooglePlayServiceActivityを拡張するので、そこにもテーマを設定します

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

それでもエラーが発生します。また、ウィンドウ機能はどこにもリクエストしません。なぜ私はこれをまだ得るのですか?

回答:


836

Android Lollipop用に開発していると思いますが、とにかく次の行を含めます。

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

内のテーマ宣言にapp/src/main/res/values/styles.xml

また、AppCompatActivityバージョン22.1以降のサポートライブラリを使用している場合は、次の行を追加します。

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

これらすべてを追加すると、テーマ宣言は次のようになります。

<!-- 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
windowActionBar同じではありませんandroid:windowActionBarか?
tyczj 2014年

65
ですが、AppCompatはandroidではなくapp名前空間属性を調べます。これにより、元々持っていなかったプラットフォームでも属性を指定できるようになります。それはcolorPrimaryのようなもののバックポートを可能にする方法です。
yarian 2014年

5
私のスタイルにその行を追加すると、アプリがクラッシュします:(
rkmax

9
また、<item name = "windowNoTitle"> true </ item>を追加します。22.1サポートライブラリ以降にAppCompatActivityを使用している場合は、stackoverflow.com
Nick

4
マニフェストファイルのアプリケーションタグにandroid:theme = "@ style / AppTheme"を追加することを忘れないでください。
live-love

202

別の簡単な方法は、テーマを次のTheme.AppCompat.Light.NoActionBarような子にすることです。

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

私もこの方法を試しましたが、それでもエラーが発生しました。しかし、それは私が私にテーマを設定する前だったかもしれないGooglePlayServiceActivity、私が覚えてはいけない
tyczj

1
いや、これは私が使ってきたものです。アクティビティがマニフェストでこのテーマを使用していることを確認してください
MrEngineer13 '22

6
このソリューションは@Nadir Belhajのソリューションよりもエレガントですが、どちらも正しいです。
voghDev 2015

これは良い答えだと思います。インラインXML属性(windowActionBar = false)を使用しても機能しませんでした
Booger

その場合、実際に便利な親であるTheme.AppCompat.Light.DarkActionBarを使用できません。
f470071 2017年

125

に1行追加android:theme="@style/AppTheme.NoActionBar"するactivityAndroidManifest、完了です。


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

ツールバーをアクションバーとして使用するには、最初に装飾が提供するアクションバーを無効にします。

最も簡単な方法は、テーマを拡張することです

Theme.AppCompat.NoActionBar

(またはそのライトバリアント)。

次に、通常はレイアウトXMLを介してToolbarインスタンスを作成します。

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

次に、アクティビティまたはフラグメントで、ツールバーをアクションバーとして機能するように設定します。

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

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

このコードは私のために働いた。


1
ありがとう!<android.support.v7.widget.ToolbarXML に追加するのを忘れました。
CoolMind 2017

1
ツールバーの色が空白になっている理由を理解できませんでした。それを緑に変える方法を理解できなかったようです。レイアウトファイルの<android.support.v7.widget.Toolbar />内にandroid:background = ""を配置するだけだったので、私はばかげたと感じました。。おかげで
アンドリューアーウィン

22

一部のアクティビティをアクションバーと組み合わせて他のアクティビティを組み合わせない場合は、基本テーマを使用してアクションバーを有効にしてから、アクションバーを必要としないアクティビティで使用するサブテーマを作成する必要があります

たとえば、次のようなサブスタイルを使用できます

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

基本テーマが拡張する一方で、

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

次に、アクティビティタグ内のAndroidManifestファイルの非アクションバーテーマを使用します。

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

アクションバーを必要としない個々のアクティビティにこれを適用する必要があるので、プロジェクトで必要なアクションバーアクティビティが必要なアクティビティよりも少ない場合は、ベーステーマレベルで適用することをお勧めします。


12

私も同じ問題に直面しました。しかし、私は使用しました:

getSupportActionBar().hide();

setContentView(R.layout.activity_main);

今それは働いています。

そして、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

これをvalues / styles.xmlに追加します

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

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

</style>

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

</style>

次のコードをvalues-v11 / styles.xmlおよびvalues-v14 / styles.xmlに追加します

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

</style>

それでおしまい。それが動作します。


6

変える必要がある

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

マニフェストのこれらの行。それは私にとっては完全に機能します。


5

プロジェクトの「style.xml」に移動し、windowActionBarをfalseにします

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

13
私の質問に対するリガードであなたの答えが正しくない場合、他の人をどのように助けますか
tyczj

「Theme.AppCompat.Light」を使用する代わりに、「Theme.AppCompat.Light.NoActionBar」を使用してください
クリスティーナ

4

次の2行を、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

ツールバーにツールバーを追加しました。次に、私の活動でこのステートメントを追加しました:

setSupportActionBar(toolbar);

これを削除するとうまくいきました。誰かのお役に立てば幸いです。


削除したくない場合はどうなりますか?つまり、ツールバーを使用するものがあります。
Sreekanth Karumanaghat

よくわかりませんが、この「setSupportActionBar(toolbar);」を削除すると思います。ツールバーはそのまま残ります。
ハリー.Naeem

4

この行でエラーが発生した場合:

setSupportActionBar(...);

アクティビティがツールバーを含むテーマを参照しているかどうかを確認する必要があります。アプリケーションのAppThemeには、次のようなツールバーがすでに含まれている場合があります。

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

そして、あなたは2番目のものを追加しようとしています。アプリケーションのAppThemeを使用する場合は、manifest.xmlファイルで、アクティビティからテーマを削除する必要があります。

例えば:

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

4

これは、マニフェストのアプリケーションタグ内またはアクティビティタグ内で使用します。

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


3

Appcompactアクティビティを使用している場合は、これらの3行をテーマで使用します。

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

2

簡単に言えば、次のことができます。

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

これが私が問題を解決した方法です。以下にコードを追加してくださいAndroidMainfest.xml

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

1
完璧!共有いただきありがとうございます。
Sandeep Yohans

1

または単に@ Style / AppThemeを変更する

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

これは私にとってはうまくいきます!


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

2つのシンプルで迅速なソリューションがあります

res-> values-> stylesに移動します

あなたはより簡単にこのビデオを見ることができますここをクリックしてください

解決策1:

置き換えることでアクションバーを削除できます

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

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

Solution2:

これらの行を追加するだけです

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

これで、スタイルファイルは次のようになります。

`

<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

この行を削除して解決しました:

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

のアクティビティプロパティから Manifest file


-2

parent="Theme.AppCompat.NoActionBar"あなたのstyle.xmlファイルに入れてください

お気に入り - <style parent="Theme.AppCompat.NoActionBar" name="AppTheme.NoActionBar">

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.