我如何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.ActionBar
和ThemeOverlay.AppCompat.Light
样式,replaceAppBarLayout->android:theme
和Toolbar->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.Title
, TextAppearance.Widget.AppCompat.Toolbar.Subtitle
, Widget.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>