我如何deviseappcompat-v7工具栏像Theme.AppCompat.Light.DarkActionBar?

我试图用新的支持库工具栏重新创buildTheme.AppCompat.Light.DarkActionBar的外观。

如果我selectTheme.AppCompat.Light我的工具栏将会很亮,如果selectTheme.AppCompat它将会变暗。 (从技术上说,你必须使用.NoActionBar版本,但据我所知,唯一的区别是

 <style name="Theme.AppCompat.NoActionBar"> <item name="windowActionBar">false</item> <item name="android:windowNoTitle">true</item> </style> 

现在没有Theme.AppCompat.Light.DarkActionBar但天真地我认为这将是足够好,只是让自己

 <style name="Theme.AppCompat.Light.DarkActionBar.NoActionBar"> <item name="windowActionBar">false</item> <item name="android:windowNoTitle">true</item> </style> 

但是,我的工具栏仍然以Light为主题。 我花了几个小时尝试混合黑暗(基地)的主题和轻的主题的不同组合,但我不能find一个组合,让我有除了工具栏之外的所有东西都有浅色背景。

有没有一种方法获得AppCompat.Light.DarkActionBar外观与导入android.support.v7.widget.Toolbar的?

Light.DarkActionBar克隆创build工具栏的build议方法是使用Theme.AppCompat.Light.DarkActionbar作为父/应用程序主题,并将以下属性添加到样式以隐藏默认的ActionBar:

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style> 

然后使用以下作为您的工具栏:

 <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> </android.support.design.widget.AppBarLayout> 

对于进一步的修改,您可以创build扩展ThemeOverlay.AppCompat.Dark.ActionBarThemeOverlay.AppCompat.Light样式,replaceAppBarLayout->android:themeToolbar->app:popupTheme 。 另外请注意,如果您已将其设置为主样式,则会拾取您的?attr/colorPrimary ,以便获得不同的背景色。

你会发现一个很好的例子是在Android Studio(1.4+)的Empty Activity的当前项目模板中。

编辑:在更新到appcompat-v7:22.1.1和使用AppCompatActivity而不是ActionBarActivity我的styles.xml看起来像:

 <style name="AppBaseTheme" parent="Theme.AppCompat.Light"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item> </style> 

注意:这意味着我正在使用框架提供的Toolbar (不包括在XML文件中)。

这对我工作:
styles.xml文件:

 <style name="AppBaseTheme" parent="Theme.AppCompat.Light"> <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="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item> </style> 

更新:来自Gabriele Mariotti博客的引用。

使用新的工具栏,您可以应用样式和主题。 他们是不同的! 样式在工具栏视图中是本地的,例如背景颜色。 应用程序:主题对于工具栏中的所有UI元素都是全局的,例如标题和图标的颜色。

好吧,沉迷于这个问题的时间已经很长时间了,这是我设法得到我期待的外观的方式。 我把它作为一个单独的答案,所以我可以在一个地方得到一切。

这是一个综合因素。

首先,不要试图通过主题让工具栏变得更好。 这似乎是不可能的。

因此,将主题明确地应用到您的工具栏,就像在ORRR的答案

布局/ toolbar.xml

 <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_alignParentTop="true" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:theme="@style/Dark.Overlay" app:popupTheme="@style/Dark.Overlay.LightPopup" /> 

然而,这是魔术酱。 为了实际获得背景颜色,我希望你必须覆盖工具栏主题中的background属性

价值观/ styles.xml:

 <!-- I expected android:colorBackground to be what I was looking for but it seems you have to override android:background --> <style name="Dark.Overlay" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <item name="android:background">?attr/colorPrimary</item> </style> <style name="Dark.Overlay.LightPopup" parent="ThemeOverlay.AppCompat.Light"> <item name="android:background">@color/material_grey_200</item> </style> 

那么只需将您的工具栏布局包含在其他布局中即可

 <include android:id="@+id/mytoolbar" layout="@layout/toolbar" /> 

你很好走。

希望这可以帮助别人,所以你不必像我一样花费这么多时间。

(如果任何人都可以弄清楚如何使用主题进行这项工作,即不必在布局文件中明确应用主题,我会很乐意支持他们的答案)

编辑:

所以显然张贴更完整的答案是一个downvote磁铁,所以我只接受上述不完整的答案,但留下这个答案在这里,以防有人真的需要它。 如果它使你快乐,随时保持downvoting。

我发现最干净的方法是创build一个“ ThemeOverlay.AppCompat.Dark.ActionBar ”的子项。 在这个例子中,我将工具栏的背景颜色设置为红色,将文本的颜色设置为蓝色。

 <style name="MyToolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> <item name="android:background">#FF0000</item> <item name="android:textColorPrimary">#0000FF</item> </style> 

然后,您可以将您的主题应用于工具栏:

 <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_height="wrap_content" android:layout_width="match_parent" app:theme="@style/MyToolbar" android:minHeight="?attr/actionBarSize"/> 

Yout可以在下面尝试。

 <style name="MyToolbar" parent="Widget.AppCompat.Toolbar"> <!-- your code here --> </style> 

详细元素可以在https://developer.android.com/reference/android/support/v7/appcompat/R.styleable.html#Toolbarfind

这里有一些: TextAppearance.Widget.AppCompat.Toolbar.TitleTextAppearance.Widget.AppCompat.Toolbar.SubtitleWidget.AppCompat.Toolbar.Button.Navigation

希望这可以帮到你。

与Arnav Rao类似,但与父母不同:

  <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="toolbarStyle">@style/MyToolbar</item> </style> <style name="MyToolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> <item name="android:background">#ff0000</item> </style> 

使用这种方法,工具栏的外观完全在应用程序样式中定义,因此您不需要在每个工具栏上放置任何样式。

要自定义工具栏样式,首先创build工具栏自定义样式inheritanceWidget.AppCompat.Toolbar,重写属性,然后将其添加到自定义应用程序主题,如下所示,请参阅http://www.zoftino.com/android-toolbar-tutorial更多信息工具栏和样式。;

  <style name="MyAppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="toolbarStyle">@style/MyToolBarStyle</item> </style> <style name="MyToolBarStyle" parent="Widget.AppCompat.Toolbar"> <item name="android:background">#80deea</item> <item name="titleTextAppearance">@style/MyTitleTextAppearance</item> <item name="subtitleTextAppearance">@style/MySubTitleTextAppearance</item> </style> <style name="MyTitleTextAppearance" parent="TextAppearance.Widget.AppCompat.Toolbar.Title"> <item name="android:textSize">35dp</item> <item name="android:textColor">#ff3d00</item> </style> <style name="MySubTitleTextAppearance" parent="TextAppearance.Widget.AppCompat.Toolbar.Subtitle"> <item name="android:textSize">30dp</item> <item name="android:textColor">#1976d2</item> </style>