Не запрашивать проблему 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.

Мой стиль .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>

и my 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);
    }

}

Я не знаю, почему это происходит. Единственный способ запустить приложение без сбоя - установить родительский элемент в style.xml в Theme.AppCompat.Light.NoActionBar, но таким образом строка состояния прозрачна и не окрашена...

Ответы

Ответ 1

Использование Theme.AppCompat.Light сообщает Android, что вы хотите, чтобы инфраструктура предоставила вам ActionBar. Тем не менее, вы создаете свой собственный ActionBar (a 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" />

Дополнительную информацию см. в разделе "стиль" для виджета панели инструментов на этом сообщении блога разработчиков Android.

Ответ 2

Предполагая, что вы получили эти строки в 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 -->

Это было лучшее решение для меня после проверки учебников и других решений.

Ответ 3

В моем случае я создал новую активность и забыл определить ее app: theme в AndroidManifest.xml:

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

Ответ 4

Я решил проблему после изменения значения для "android: theme" для Activity в манифесте из "@style/AppTheme" в "@style/AppTheme.NoActionBar":

<activity android:name=".MyXXXActivity"
            ...                android:theme="@style/AppTheme.NoActionBar" />