2016-04-21 4 views
1

Я боролся с стилем PopupMenu, и после многих исследований процесс создания пользовательского стиля PopupMenu для моей темы казался довольно прямолинейным. Например, ответ на this question выглядит как простой способ изменить цвет фона PopupMenu. Однако ни один из этих решений не работал для моего проекта. Поэтому я начал копаться в источниках стиля, чтобы узнать, что я должен наследовать, чтобы стиль PopupMenu в моем собственном проекте.Пользовательские стили PopupMenu игнорируются

Я бегу моих тестов на телефоне под управлением API 19, и моя базовая тема выглядит следующим образом:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <!-- ... --> 
    <item name="android:popupMenuStyle">@style/CustomPopupMenu</item> 
</style> 

<style name="CustomPopupMenu" parent="@style/Widget.AppCompat.Light.PopupMenu"> 
    <item name="android:popupBackground">@color/retina_burning_hot_pink</item> 
</style> 

Это решение, что большинство принятых ответов здесь показать. Но это не стиль моего PopupMenu. Поэтому я врывался в источники, чтобы найти геномную тему моей темы и посмотреть, какие настройки по умолчанию используются. Это то, что я нашел:

<style name="Theme.AppCompat.Light.DarkActionBar" parent="Base.Theme.AppCompat.Light.DarkActionBar"/> 
<style name="Base.Theme.AppCompat.Light.DarkActionBar" parent="Base.Theme.AppCompat.Light"> 
<style name="Base.Theme.AppCompat.Light" parent="Base.V7.Theme.AppCompat.Light"/> 

А потом в Base.V7.Theme.AppCompat.Light я нашел эти настройки:

<!-- Popup Menu styles --> 
<item name="popupMenuStyle">@style/Widget.AppCompat.Light.PopupMenu</item> 
<item name="textAppearanceLargePopupMenu">@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large</item> 
<item name="textAppearanceSmallPopupMenu">@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small</item> 
<item name="listPopupWindowStyle">@style/Widget.AppCompat.ListPopupWindow</item> 
<item name="dropDownListViewStyle">?android:attr/dropDownListViewStyle</item> 

Так, насколько я могу сказать, моя тема наследует от Theme.AppCompat.Light.DarkActionBar который использует по умолчанию PopupMenu стиль @style/Widget.AppCompat.Light.PopupMenu. Затем я наследую этот стиль, чтобы установить собственные настройки PopupMenu. Я убедился, что моя активность и мое приложение используют правильную тему. Я не уверен, почему еще это не сработает. Я также пробовал эти настройки:

<item name="android:textAppearanceLargePopupMenu">@style/CustomPopupMenuLarge</item> 
<item name="android:textAppearanceSmallPopupMenu">@style/CustomPopupMenuSmall</item> 
<item name="android:popupWindowStyle">@style/CustomPopupMenuListWindow</item> 

Я предоставил пользовательские стили для каждого из них, и никто из них не работал. Что может быть переоценкой всех моих пользовательских стилей? Любая помощь будет оценена, потому что я в тупике.


редактирует

Вот мой манифест ...

<?xml version="1.0" encoding="utf-8"?> 
<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.blah.blah"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity 
      android:name=".Activities.MainActivity" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

Вот AppTheme.NoActionBar

<style name="AppTheme.NoActionBar"> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
</style> 
+0

вы настройки темы в манифесте? – Sree

+0

@Sree - Да, как указано в вопросе. – NoChinDeluxe

+0

Можем ли мы увидеть код (вы, вероятно, делаете это правильно, но только для того, чтобы убедиться) – Sree

ответ

0

Я думаю, вам нужно определить родителя для AppCompat.NoActionBar. Попробуйте parent="Theme.AppCompat.Light.NoActionBar", а также добавьте в него <item name="android:popupMenuStyle">@style/CustomPopupMenu</item>.

+0

Я уже пробовал это, и это не имело значения. Я попытался сделать «AppTheme» родителем, и теперь я просто попросил ваше предложение попробовать, и он изменил некоторые цвета вещей, но PopupMenu остается неизменным. – NoChinDeluxe

+0

Хм .. это должно работать.Могу ли я увидеть изменения, внесенные вами с моими предложениями. – Sree

+0

Я просто изменил его так, как вы предлагали. Я сделал верхнюю строку '