Как создать панель инструментов appcompat-v7, например Theme.AppCompat.Light.DarkActionBar?

Я пытаюсь воссоздать внешний вид Theme.AppCompat.Light.DarkActionBar с новой панелью инструментов библиотеки поддержки.

Если я выберу Theme.AppCompat.Light моя панель инструментов будет светлой, и если я выберу Theme.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> 

Однако с этим мои панели инструментов все еще освещены. Я потратил несколько часов на то, чтобы попробовать разные комбинации микширования темной (основной) темы и темы «Свет», но я просто не могу найти комбинацию, которая позволит мне иметь светлые фоны на всех, кроме панелей инструментов.

Есть ли способ получить представление AppCompat.Light.DarkActionBar с импортом android.support.v7.widget.Toolbar ?

Solutions Collecting From Web of "Как создать панель инструментов appcompat-v7, например Theme.AppCompat.Light.DarkActionBar?"

Рекомендуемым способом Light.DarkActionBar панели инструментов для клона Light.DarkActionBar будет использование 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> 

Для дальнейших модификаций вы создадите стили, расширяющие ThemeOverlay.AppCompat.Dark.ActionBar и ThemeOverlay.AppCompat.Light заменяя те, которые находятся в AppBarLayout->android:theme и Toolbar->app:popupTheme . Также обратите внимание, что это заберет ваш ?attr/colorPrimary если вы установили его в своем основном стиле, чтобы вы могли получить другой цвет фона.

Вы найдете хороший пример этого в текущем шаблоне проекта с пустым действием Android Studio (1.4+).

Изменить: после обновления до 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> 

Обновление: цитата из блога Габриэле Мариотти .

С помощью новой панели инструментов вы можете применить стиль и тему. Они разные! Стиль является локальным для представления панели инструментов, например, цвета фона. Приложение: тема вместо этого является глобальным для всех элементов ui, завышенных на панели инструментов, например, цвета заголовка и значков.

Хорошо, после того, как я поторопился в этом вопросе, это так, как мне удалось получить внешний вид, на который я надеялся. Я делаю это отдельным ответом, чтобы все было в одном месте.

Это сочетание факторов.

Во-первых, не пытайтесь заставить панели инструментов играть хорошо через только темы. Это кажется невозможным.

Поэтому примените темы явно к вашим панелям инструментов, например, в ответах oRR

макет / 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" /> 

И тебе хорошо идти.

Надеюсь, это поможет кому-то другому, поэтому вам не нужно тратить столько времени на это, как я.

(Если кто-то может понять, как сделать эту работу, используя только те темы, то есть не нужно явно применять темы в файлах макета, я с радостью поддержу их ответ)

РЕДАКТИРОВАТЬ:

По-видимому, публикация более полного ответа была магнитом с понижающим звуком, поэтому я просто соглашусь с неполным ответом выше, но оставим этот ответ здесь, если кому-то это действительно нужно. Не стесняйтесь держать downvoting, если это делает вас счастливым, хотя.

Самый чистый способ, который я нашел для этого, – создать дочерний элемент ThemeOverlay.AppCompat.Dark.ActionBar . В этом примере я установил цвет фона панели инструментов RED и цвет текста BLUE.

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

Вот еще несколько: TextAppearance.Widget.AppCompat.Toolbar.Title , TextAppearance.Widget.AppCompat.Toolbar.Subtitle , Widget.AppCompat.Toolbar.Button.Navigation .

Надеюсь, это может вам помочь.