Android AppCompatActivity未显示工具栏

时间:2017-01-17 03:07:26

标签: android android-toolbar appcompatactivity

在我的应用程序中,我有一个带有抽屉布局的主活动,可在两个片段之间导航。其中一个片段有一个FAB,可以打开另一个从AppCompatActivity扩展的活动。此活动不显示下方工具栏,上方工具栏显示为灰色。我设法在xml代码中添加了一个下方的工具栏:

<android.support.v7.widget.Toolbar
    android:id="@+id/editor_toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    app:title="Add Manual Entry"/>

但无论如何,上方工具栏都会以灰色显示。尝试将上部工具栏设置为我的colorPrimaryDark作为变通方法,但没有办法做到这一点。我查看了我的AppTheme,发现了这个:

<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>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

看到父母说没有操作栏,我尝试将其更改为Theme.AppCompat.Light,但我在主要活动中收到此错误: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.tobias.run/com.example.tobias.run.MainActivity}: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.

看起来像我的MainActivity和它的抽屉布局需要NoActionBar主题,尽管我不确定。为什么我的辅助活动没有附带工具栏?我该如何添加一个?

PS:辅助活动代码和xml都与Android Studio使用空活动模板创建它们的方式相同。 xml刚刚添加了工具栏。

3 个答案:

答案 0 :(得分:2)

这意味着您已经在视图层次结构中的某个位置包含了一个工具栏(您没有提供完整的布局,很难说)。 在任何情况下,只需将这两行粘贴到您的代码(OnCreate的Actvity)中,大多数情况下这应该可以解决您的问题。

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

哦,是的,还原您为提供操作栏所做的其他更改。

如果您在布局中专门更改了工具栏参考,则工具栏参考可能会有所不同。默认值始终为id toolbar Android有时会重新修改整个动作栏的内容并使其更具通用性。因此,您在布局中包含的是一个通用工具栏,除非您在代码中设置它,否则它不会显示为操作栏。

答案 1 :(得分:2)

试试这个

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

OR

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

并在你的Manifest中

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

答案 2 :(得分:0)

结束找到解决方法。问题是 <item name="android:statusBarColor">@android:color/transparent</item> 在AppTheme中。将其设置为透明时,状态栏会在激活抽屉布局时淡化为透明,这是所需的结果。但是当您创建新活动时,状态栏看起来与您的背景完全相同,使其看起来没有状态栏。为了使它工作,我将attr透明放在抽象布局的App主题中,但在运行时,在我的其他活动中,在post之后的状态栏的颜色中更改了。