使用 Drawable 设置 ActionBar 背景样式的问题
Problems styling ActionBar background with Drawable
我尝试使用此 theme/style
将图像添加到 ActionBar 背景
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:background">@drawable/actionbar_background</item>
</style>
但是,虽然背景正在更改,但它在标题和菜单按钮上产生了奇怪的效果。就好像它们在 ActionBar 中是独立的 child 视图(也许它们是,我不确定)并且 Drawable 被单独应用到它们。
我希望在 ActionBar 上应用一个无缝的 Drawable。这是可能的还是我应该放弃,而只是用单一颜色更改背景?
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/layout_activity_main"
tools:context=".MainActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
</android.support.design.widget.CoordinatorLayout>
styles.xml
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="coordinatorLayoutStyle">@style/Widget.Support.CoordinatorLayout</item>
<item name="colorAccent">@android:color/black</item>
<item name="colorPrimary">@android:color/holo_blue_dark</item>
<item name="colorPrimaryDark">@android:color/holo_blue_dark</item>
<item name="android:textColor">@android:color/white</item>
<item name="android:textColorSecondary">@android:color/white</item>
<item name="android:textColorHint">@android:color/white</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="android:windowBackground">@drawable/no_actionbar_background</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:background">@drawable/actionbar_background</item>
</style>
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light">
<item name="android:background">@android:color/black</item>
</style>
</resources>
"android:background"
在您的样式中,更改布局中每个组件的背景。
你可以用这样的东西改变你的 ActionBar 的颜色。
<item name="android:navigationBarColor">@color/colorPrimary</item>
当您设置视图的 android:theme
属性时,您传递的样式将应用于该视图 及其所有 children。在您的情况下,AppBarLayout 确实(在内部)对标题和溢出菜单按钮使用单独的视图。
但是,由于您的样式似乎唯一要做的就是设置 android:background
属性,您可以直接在 AppBarLayout 上进行设置。因此,替换为:
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
有了这个:
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/actionbar_background">
这是一个示例,因为 AppCompat-v7 Toolbar, the other Toolbar 在主题方面有点不同。
我真的不能给你最适合你的答案,这个代码只是在这里给你指明方向。
变化的是工具栏使用 style
而不是 android:theme
并且它使用了新样式 AppTheme.Toolbar
.
AppTheme.Toolbar
将您的自定义背景、工具栏内视图的主题(标题、副标题等)和弹出菜单的主题分组。
children 的主题和弹出菜单是分开的,因此您可以单独控制每个组件。
尝试使用他们的 parent
属性(从深色到浅色)并选择最适合您的。
进入你的styles.xml
<style name="AppTheme.Toolbar">
<item name="android:background">@drawable/actionbar_background</item>
<item name="popupTheme">@style/AppTheme.PopupOverlay</item>
<item name="android:theme">@style/AppTheme.AppBarOverlay</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<!-- Change attribute of the toolbar views-->
</style>
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Dark">
<!--Change attribute of the menu-->
</style>
进入你的activity_main.xml
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
style="@style/AppTheme.Toolbar"
android:layout_height="?attr/actionBarSize" />
</android.support.design.widget.AppBarLayout>
我尝试使用此 theme/style
将图像添加到 ActionBar 背景<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:background">@drawable/actionbar_background</item>
</style>
但是,虽然背景正在更改,但它在标题和菜单按钮上产生了奇怪的效果。就好像它们在 ActionBar 中是独立的 child 视图(也许它们是,我不确定)并且 Drawable 被单独应用到它们。
我希望在 ActionBar 上应用一个无缝的 Drawable。这是可能的还是我应该放弃,而只是用单一颜色更改背景?
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/layout_activity_main"
tools:context=".MainActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
</android.support.design.widget.CoordinatorLayout>
styles.xml
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="coordinatorLayoutStyle">@style/Widget.Support.CoordinatorLayout</item>
<item name="colorAccent">@android:color/black</item>
<item name="colorPrimary">@android:color/holo_blue_dark</item>
<item name="colorPrimaryDark">@android:color/holo_blue_dark</item>
<item name="android:textColor">@android:color/white</item>
<item name="android:textColorSecondary">@android:color/white</item>
<item name="android:textColorHint">@android:color/white</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="android:windowBackground">@drawable/no_actionbar_background</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:background">@drawable/actionbar_background</item>
</style>
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light">
<item name="android:background">@android:color/black</item>
</style>
</resources>
"android:background"
在您的样式中,更改布局中每个组件的背景。 你可以用这样的东西改变你的 ActionBar 的颜色。
<item name="android:navigationBarColor">@color/colorPrimary</item>
当您设置视图的 android:theme
属性时,您传递的样式将应用于该视图 及其所有 children。在您的情况下,AppBarLayout 确实(在内部)对标题和溢出菜单按钮使用单独的视图。
但是,由于您的样式似乎唯一要做的就是设置 android:background
属性,您可以直接在 AppBarLayout 上进行设置。因此,替换为:
<android.support.design.widget.AppBarLayout android:id="@+id/appBarLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay">
有了这个:
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/actionbar_background">
这是一个示例,因为 AppCompat-v7 Toolbar, the other Toolbar 在主题方面有点不同。
我真的不能给你最适合你的答案,这个代码只是在这里给你指明方向。
变化的是工具栏使用 style
而不是 android:theme
并且它使用了新样式 AppTheme.Toolbar
.
AppTheme.Toolbar
将您的自定义背景、工具栏内视图的主题(标题、副标题等)和弹出菜单的主题分组。
children 的主题和弹出菜单是分开的,因此您可以单独控制每个组件。
尝试使用他们的 parent
属性(从深色到浅色)并选择最适合您的。
进入你的styles.xml
<style name="AppTheme.Toolbar">
<item name="android:background">@drawable/actionbar_background</item>
<item name="popupTheme">@style/AppTheme.PopupOverlay</item>
<item name="android:theme">@style/AppTheme.AppBarOverlay</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<!-- Change attribute of the toolbar views-->
</style>
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Dark">
<!--Change attribute of the menu-->
</style>
进入你的activity_main.xml
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
style="@style/AppTheme.Toolbar"
android:layout_height="?attr/actionBarSize" />
</android.support.design.widget.AppBarLayout>