web-dev-qa-db-ja.com

Window.FEATURE_ACTION_BARの問題をリクエストしないでください

私は自分のアプリを作成しようとしていますが、成功していません。例外は次のとおりです。

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.

私のstyle.xmlは次のとおりです。

<resources>

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

        <!-- theme customizations -->

        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="Android:windowNoTitle">true</item>
        <item name="Android:windowActionBar">false</item>

        <item name="Android:textColorPrimary">@color/ldrawer_color</item>
        <item name="actionMenuTextColor">@color/ldrawer_color</item>
        <item name="Android:textColorSecondary">@color/ldrawer_color</item>
    </style>

</resources>

そしてあなたが見ることができるように私は宣言しました

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

これは私のmanifest.xmlです

 <application
        Android:allowBackup="true"
        tools:replace="Android:icon"
        Android:icon="@mipmap/ic_launcher"
        Android:label="@string/app_name"
        Android:theme="@style/AppTheme" >
        <activity
            Android:name=".MainActivity"
            Android:label="@string/app_name" >
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />

                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

他のアクティビティを拡張するために使用するBaseActivity

import Android.os.Bundle;
import Android.support.v7.app.AppCompatActivity;
import Android.support.v7.widget.Toolbar;

public abstract class BaseActivity extends AppCompatActivity {

    public Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getLayoutResource());
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        if (toolbar != null) {
            setSupportActionBar(toolbar);
            getSupportActionBar().setTitle(BaseActivity.this.getResources().getString(R.string.app_name));
            //getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }

    protected abstract int getLayoutResource();

    protected void setActionBarIcon(int iconRes) {
        toolbar.setNavigationIcon(iconRes);
    }

}

クラッシュする理由はわかりません。クラッシュせずにアプリケーションを起動する唯一の方法は、Theme.AppCompat.Light.NoActionBarのstyle.xmlに親を設定することですが、この方法ではステータスバーは透明で、色付けされません...

19
End.Game

Theme.AppCompat.Lightを使用すると、AndroidにフレームワークにActionBarを提供することを指示します。ただし、独自のActionBar(Toolbar)を作成しているため、フレームワークに、ActionBarをどこから取得したいかに関するシグナルを与えます。

ツールバーを使用しているため、Theme.AppCompat.Light.NoActionBarが必要です。

次のステップは、ツールバーのスタイルが正しいことを確認することです。これは、問題が発生している場所のようです。テーマに定義した色を使用して、ツールバーをActionBarのようにスタイルするには、次のようなテーマを提供する必要があります。

<Android.support.v7.widget.Toolbar
    Android:layout_height="wrap_content"
    Android:layout_width="match_parent"
    Android:minHeight="?attr/actionBarSize"
    app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />

this Android Developers blog post のツールバーウィジェットの「スタイリング」セクションを参照してください。

47
Tanis.7x

styles.xmlに次の行があると仮定します。

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

以下の追加行を追加します。

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

次に、これをマニフェストのアクティビティに追加します。

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

チュートリアルやその他のソリューションを確認した後、それは私にとって最高のソリューションでした

13
Alex Jolig

私の場合、新しいアクティビティを作成し、AndroidManifest.xmlでapp:themeを定義するのを忘れていました。

 <activity
        Android:name=".HistoryActivity"
        Android:label="History"
        Android:theme="@style/AppTheme.Primary"></activity>
4
Heisenberg

マニフェストのアクティビティの「Android:theme」の値を「@ style/AppTheme」から「@ style/AppTheme.NoActionBar」に変更した後、問題を解決しました。

<activity Android:name=".MyXXXActivity"
            ...                Android:theme="@style/AppTheme.NoActionBar" />
1
Fa Sche