不要请求Window.FEATURE_ACTION_BAR问题

End*_*ame 19 java xml android appcompatactivity

我正在尝试构建我的应用程序,但没有成功..我尝试了几种方式,但没有任何工作.例外是:

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.
Run Code Online (Sandbox Code Playgroud)

我的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>
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我已经宣布了

<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
Run Code Online (Sandbox Code Playgroud)

这是我的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>
Run Code Online (Sandbox Code Playgroud)

而我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);
    }

}
Run Code Online (Sandbox Code Playgroud)

我不知道它崩溃的原因.启动应用程序而没有崩溃的唯一方法是在style.xml上设置父级,Theme.AppCompat.Light.NoActionBar但是这样状态栏是透明的而不是彩色的......

Tan*_*.7x 47

使用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" />
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅此Android开发人员博客文章中 "工具栏"小部件的"样式"部分.


Ale*_*lig 13

假设你有这样的话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>
Run Code Online (Sandbox Code Playgroud)

之后添加以下额外行:

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>
Run Code Online (Sandbox Code Playgroud)

然后将其添加到清单中的活动:

<activity android:name=".activity.YourActivity"
          android:theme="@style/AppTheme.NoActionBar"><!-- ADD THIS LINE -->
Run Code Online (Sandbox Code Playgroud)

在检查教程和其他解决方案后,这对我来说是最好的解决方案