2015-08-20 2 views
4

Почему мой код styles.xml успешно меняет цвет фона моего меню переполнения панели действий, но не удается изменить цвет фона контекстного меню в моем приложении?android: popupBackground не работает для контекстных меню

<style name="AppBaseTheme" parent="Theme.AppCompat.Light"> 
    <!--<item name="android:actionBarStyle">@style/DarkActionBar</item> --> 

</style> 

<!-- Application theme. --> 
<style name="AppTheme" parent="AppBaseTheme"> 

    <!-- All customizations that are NOT specific to a particular API-level can go here. --> 
    <item name="android:popupMenuStyle">@style/MyPopupMenu</item> 
    <item name="android:itemTextAppearance">@style/MyCustomMenuTextAppearance</item> 

</style> 

<!-- Popup Menu Background Color styles --> 
<!-- <style name="MyPopupMenu" parent="@android:style/Widget.Holo.ListPopupWindow"> --> 
<!-- <style name="MyPopupMenu" parent="@android:style/Widget.PopupMenu"> --> 
<style name="MyPopupMenu" parent="@style/Widget.AppCompat.PopupMenu"> 
    <item name="android:popupBackground">@color/dark_gray</item> 
</style> 
<!-- Popup Menu Text Color styles --> 
<style name="MyCustomMenuTextAppearance"> 
    <item name="android:textColor">@color/white</item> 
</style> 

Я застрял на этом пару часов, и ни одно из решений по SO для подобных вопросов не сработало для меня.

Если это помогает, вот мой Java код, где создается контекстное меню:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 

    AdapterView.AdapterContextMenuInfo info = 
      (AdapterView.AdapterContextMenuInfo) menuInfo; 
    String selectedWord = ((TextView) info.targetView).getText().toString(); 
    menu.setHeaderTitle(selectedWord); 

    MenuInflater inflater = getActivity().getMenuInflater(); 
    inflater.inflate(R.menu.shopping_list_name_context, menu); 
} 

И, для полноты картины, вот мое контекстное меню XML, shopping_list_name_context.xml:

<item android:id="@+id/rename_shopping_list" 
     android:icon="@drawable/ic_action_edit" 
     android:title="@string/rename_shopping_list" /> 

<item android:id="@+id/empty_shopping_list" 
     android:icon="@drawable/ic_action_discard" 
     android:title="@string/empty_shopping_list" /> 

<item android:id="@+id/delete_shopping_list" 
     android:icon="@drawable/ic_action_discard" 
     android:title="@string/delete_shopping_list" /> 

И, поскольку r equested, вот отрывок из моего AndroidManifest.xml:

<uses-sdk 
    android:minSdkVersion="14" 
    android:targetSdkVersion="21" /> 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.USE_CREDENTIALS" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 

<supports-screens  
    android:smallScreens="true" 
    android:normalScreens="true" 
    android:largeScreens="true" 
    android:xlargeScreens="true" /> 

<permission 
    android:name="com.example.myapp.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 

<uses-permission android:name="com.example.myapp.permission.C2D_MESSAGE" /> 
<uses-permission android:name="com.android.vending.BILLING" /> 

<application 
    android:name=".MyApplication" 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name_short" 
    android:theme="@style/AppTheme" 
    android:largeHeap="true" > 
+0

Можете ли вы разместить свой AppManifest.xml, пожалуйста? –

+0

ОК, теперь добавили соответствующую его часть. –

+0

Проверьте этот stackoverflow [Post] (http://stackoverflow.com/questions/30526667/appcompat-toolbar-popuptheme-not-used-when-multi-selection-active/30633124#30633124). – Elltz

ответ

0

Вы должны переписать actionModeBackground так:

<item name="android:actionModeBackground">@drawable/context_menu</item> 

можно дублировать вопрос: Override context menu colors in Android

+0

Я добавил это в свой элемент '' element (и создал ** drawable-nodpi/context_menu.xml **), но я боюсь, что hasn Я работал. –

2

Ниже код для установки фона в контекстном меню, и он работает как шарм.

В styles.xml файл поместить ниже код:

<!-- Application theme. --> 
<style name="AppTheme" parent="AppBaseTheme"> 

    <item name="android:itemBackground">@android:color/holo_green_dark</item> 

</style> 
+0

Благодарим за это, но он меняет только меню переполнения bg color - не контекстное меню bg color. –

+0

Эй, братан, вы помещаете только один отдельный элемент itemBackground в стиле, который мне нужно обновить в моем ответе и удалить все остальные строки, и он работает как шарм, я его протестировал –

+0

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

0

Попробуйте добавить это:

<item name="android:popupBackground">@android:color/white</item> 

Я надеюсь, что это помогает!

+0

Привет, но я получаю эту ошибку для второй строки: 'error: Ошибка: ресурс не найден, который соответствует указанному имени: attr 'popupBackground'.' –

+0

что такое taargetSdkVersion? – Rajesh

+0

Целевая версия sdk - 14. –

0

В вашем баре XML приложения:

app:popupTheme="@style/MyCustomOverflowTheme" 

Затем в styles.xml:

<style name="MyCustomOverflowTheme" parent="Theme.AppCompat.Light"> 
    <item name="android:textColorPrimary">@color/primaryColor</item> 
    <item name="android:textColorSecondary">@color/accentColor</item> 
    <item name="android:background">@color/accentColor</item> 
</style> 

EDIT

app:popupTheme="@style/MyCustomOverflowTheme" 

Если идти в вашей панели инструментов или ActionBar собственности, например:

<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_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/primaryColor" 
    app:theme="@style/MyCustomToolBarTheme" 
    app:popupTheme="@style/MyCustomOverflowTheme" 
    > 
</android.support.v7.widget.Toolbar> 
+0

Спасибо за это. Можете ли вы уточнить, куда должна идти строка 'app: popupTheme =" @ style/MyCustomOverflowTheme "? –

+0

И будет ли это работать, если minSdkVersion равно 14? –

+0

Просто заметил ваше редактирование. Контекстное меню не отображается с панели инструментов или ActionBar, а длительное нажатие на пользовательский TextView. Я попробовал добавить в xml пользовательский TextView в xml «xmlns: app =» http://schemas.android.com/apk/res-auto »и« app: popupTheme = "@ style/MyCustomOverflowTheme» ', но я просто get 'error: идентификатор ресурса не найден для атрибута popupTheme в пакете com.example.myapp''. –

0

Вы пытались поставить «андроид: actionModeBackground» в своей теме ActionBar?

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar"> 
    <!-- main theme --> 
    ..... 
    <item name="actionBarStyle">@style/AppTheme.ActionBar</item> 

    <!-- if you're using Toolbar you have to put this --> 
    <item name="windowActionModeOverlay">true</item> 

</style> 

<style name="AppTheme.ActionBar" parent="Theme.AppCompat.Light"> 
     ..... 
    <item name="android:actionModeBackground">@color/theme_ambiance_dark</item> 
     ..... 
</style> 
+0

Не работает, но спасибо в любом случае. –

Смежные вопросы