在我的应用程序中,我有一个带有抽屉布局的主活动,可在两个片段之间导航。其中一个片段有一个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刚刚添加了工具栏。
答案 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之后的状态栏的颜色中更改了。