Переопределить цвета контекстного меню в Android - PullRequest
10 голосов
/ 05 января 2011

Посмотрим,

я знаю, как изменить стиль ListView (оранжевый цвет при выборе элемента):

android: listSelector = "@ drawable / xxx" и отрисовка с растровым изображением или @ color

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:drawable="@drawable/image" />
    <item android:drawable="@android:color/transparent" />  
</selector> 

Дело в том, что для того, чтобы иметь согласованный дизайн, я должен сделать то же самое для контекстного меню, но я просто не могу увидеть, где его изменить. Нет списка выбора, нечего менять.

Ответы [ 3 ]

6 голосов
/ 07 января 2011

Если под контекстным меню вы имеете в виду меню от длительного нажатия, то я сделал это с помощью следующего кода. Мое меню имеет фон моей темы и зеленую подсветку.

макет контекстного меню:

<menu
  xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/resetConfirm" android:title="@string/actual_reset"></item>
</menu>

styles.xml, где я использую собственную тему (которую я считаю ключевой)

 <style name="GradientLight" parent="@android:style/Theme.Light">
    <item name="android:windowBackground">@drawable/background</item>
    <item name="android:progressBarStyle">@style/progressBar</item>
    <item name="android:buttonStyle">@style/greenButton</item>
    <item name="android:buttonStyleSmall">@style/greenButton</item>
    <item name="android:listViewStyle">@style/listView</item>
    <item name="android:itemBackground">@drawable/menu_selector</item>
    <item name="android:spinnerStyle">@style/spinner</item>
</style>
<style name="listView" parent="@android:style/Widget.ListView.White">
 <item name="android:background">@drawable/background</item>
 <item name="android:listSelector">@drawable/list_selector_background_green</item>
</style>
5 голосов
/ 18 августа 2015

Это единственный подход, который работал для меня:

Вы можете переопределить атрибут android actionModeBackground (который я нашел в Android / Sdk / platform / android-22 / data / res / values ​​/ themes_holo.xml).и R.attr ) в теме вашего приложения:

<style name="AppTheme" parent="android:Theme.Holo">
    <item name="android:windowBackground">@color/background</item>
    <item name="android:actionBarStyle">@style/MyActionBar</item>
    <item name="android:actionModeBackground">@drawable/context_menu</item>
    ...
</style>

и замените его собственными рисунками и цветами, в данном случае

context_menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/context_menu_bottom" />
    <item android:drawable="@drawable/context_menu_top"/>
</layer-list>

, который состоит из

context_menu_bottom.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid android:color="@color/accent"/>
    <padding android:bottom="4dp"/>
</shape>

и

context_menu_top.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid android:color="@color/primary"/>
</shape>

Надеюсь, это поможет!

0 голосов
/ 01 апреля 2017

Вот как вы это делаете. Перейдите к resources> styles.xml и переопределите значение атрибута itemBackgroud темы следующим образом:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="android:itemBackground">"YOUR_COLOUR_HERE"</item>
</style>

Если это не работает, проверьте в AndroidManifet.xml, что вы действительно используете ту же тему на уровне приложения:

<application
    ...
    android:theme="@style/AppTheme">

    ...

 </application>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...