此活动已经有一个由窗口装饰提供的操作栏(FEATURE_ACTION_BAR)

Posted

技术标签:

【中文标题】此活动已经有一个由窗口装饰提供的操作栏(FEATURE_ACTION_BAR)【英文标题】:This Activity already has an action bar supplied by the window decor (FEATURE_ACTION_BAR) 【发布时间】:2015-03-03 07:22:06 【问题描述】:

这个 Activity 已经有一个由窗口装饰提供的操作栏。不要在主题中请求 Window.FEATURE_ACTION_BAR 并将 windowActionBar 设置为 false 以使用工具栏来代替

这是我遇到的错误,我搜索了解决方案,但没有找到解决方法。 这是我的代码:

styles.xml

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/myPrimaryColor</item>
    <item name="colorPrimaryDark">@color/myPrimaryDarkColor</item>
    <item name="colorAccent">@color/myAccentColor</item>

    <item name="android:textColorPrimary">@color/myTextPrimaryColor</item>
</style>

<style name="ActionBarPopupThemeOverlay" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="windowActionBar">false</item>
</style>

<style name="Toolbartitle" parent="@style/TextAppearance.Widget.AppCompat.Toolbar.Title">
    <item name="android:textColor">@android:color/white</item>
</style>

<style name="ToolbarSubtitle" parent="@style/TextAppearance.Widget.AppCompat.Toolbar.Subtitle">
    <item name="android:textColor">#56FFFFFF</item>
</style>

send_comment.xml(我的活动布局)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_
              android:layout_>
    <android.support.v7.widget.Toolbar
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/my_toolbar"
            android:layout_
            app:popupTheme="@style/ActionBarPopupThemeOverlay"
            android:layout_
            android:background="?attr/colorPrimary"
            android:paddingLeft="72dp"
            android:paddingBottom="16dp"
            android:gravity="bottom"
            app:titleTextAppearance="@style/Toolbartitle"
            app:subtitleTextAppearance="@style/ToolbarSubtitle"
            app:theme="@style/ThemeOverlay.AppCompat.Light"
            android:title="תגובה"
            />
</RelativeLayout>

SendComment.java

public class SendComment extends ActionBarActivity 
    private Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.send_comment);
        toolbar = (Toolbar) findViewById(R.id.my_toolbar);
        toolbar.setTitle("");
        setSupportActionBar(toolbar);
    

我做错了什么?

【问题讨论】:

This Activity already has an action bar supplied by the window decor 的可能重复项 您说您搜索了解决方案,但最热门的是上面发布的重复建议。是不是完全一样的问题? 但是我搜了一下找到了,看是我把它加到了工具栏的样式里。如果我把它加到AppTheme,应用会崩溃,因为它不是唯一的activity,而且其他人使用此操作栏。那么,如果我已经尝试过您现在所说的话,为什么要给我分呢? 【参考方案1】:

在您的 AppTheme 样式中使用,

Theme.AppCompat.Light.NoActionBar

而不是

Theme.AppCompat.Light.DarkActionBar

您正在设置一个具有操作栏的主题,然后您正在将工具栏设置为操作栏。这就是您收到此错误的原因。

改用没有操作栏的主题,它会解决问题。

【讨论】:

但我将 AppTheme 用于其他活动,当我更改它时,其他活动崩溃:/ 然后将主题应用于清单 xml 中的单个活动...。创建一个单独的样式,父级为 Theme.AppCompat.NoActionBar 并将其用于您需要工具栏的活动 好的,我将android:theme="@style/ActionBarPopupThemeOverlay" 添加到特定活动中,它正在工作。感谢您的帮助 很高兴我能帮上忙……快乐的编程:) 我现在遇到了同样的问题并进行了所有更改,但仍然无法正常工作。我认为 Android Studios 1.1 不会更新主题更改,除非您将其无效,但一旦我无效,它就可以正常工作。【参考方案2】:

使用风格name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar" 并且到处都使用相同的主题,因为它不会在两个 ActionBar 之间混淆。

【讨论】:

【参考方案3】:
Define this style 
<style name="NoActionBarTheme" parent="Theme.AppCompat.Light.NoActionBar">
            <!-- Customize your theme here. -->
            <item name="textColorError">@color/design_textinput_error_color_light</item>
            <item name="android:windowNoTitle">true</item>
            <item name="android:windowActionBar">false</item>
            <item name="android:actionMenuTextColor">@color/color_white</item>
            <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
        </style> 
Please use this in your androidmanifest.xml file.This will resolve your problem. 

【讨论】:

请同时包含上面引用的 res/values/color 和 res/values/style 的内容。

以上是关于此活动已经有一个由窗口装饰提供的操作栏(FEATURE_ACTION_BAR)的主要内容,如果未能解决你的问题,请参考以下文章

windows 窗口由那几部分组成 有啥用

关闭窗口的四种操作方法 关闭窗口的四种操作方法介绍

Python装饰类中的方法和继承

在没有窗口的情况下更改状态栏颜色

Wpf窗口标题栏鼠标活动

修复了操作栏,考虑了页脚