2011-01-05 15 views
10

sehen lassen,Aufschalten Kontextmenü Farben in Android

ich weiß, wie der Stil eines Listview ändern (die orange Farbe, wenn ein Element ausgewählt ist):

android: listSelector = "@ ziehbar/xxx "und ein ziehbar mit einem Bitmap oder einem @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> 

die Sache ist, um ein kohärentes Design zu haben, ich habe das gleiche für ein Kontextmenü zu tun, aber ich kann einfach nicht sehen, wo man ändern Sie es. Es gibt keinen listSelector, nichts zu ändern.

+1

AFAIK, Sie können den Selektor für ein Kontextmenü nicht ändern, da dies standardmäßig für die Plattform sein soll. – CommonsWare

+0

Das habe ich mir gedacht, danke fürs Antworten! – ferostar

Antwort

6

Wenn per Kontextmenü das Menü aus der langen drücken, dann habe ich dies mit dem folgenden Code getan. Mein Menü hat den Hintergrund meines Themas und ein grünes Highlight.

Kontextmenü Layout:

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

styles.xml, wo ich ein eigenes Thema bin mit (was ich denke, der Schlüssel ist)

<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> 
+0

Hallo Mann, und wo wenden Sie den Stil GradientLight an? – Dayerman

+0

Das ist das Thema, das ich auf Anwendungsebene in ApplicationManifest.xml anwenden – NKijak

+3

@NKijak Dies funktioniert nicht für mich auf ICS ...:/Irgendwelche Ideen? –

5

der einzige Ansatz Dies ist die für arbeitete me:

Sie können das Android-Attribut actionModeBackground (das ich in Android/Sdk/Plattformen/android-22/data/res/values ​​/ themes_holo.xml und R.attr) in Ihrem App-Thema überschreiben:

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

und ersetzen Sie es mit Ihrem eigenen ziehbar und Farben, in diesem Fall

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> 

, die von

context_menu_bottom.xml zusammen:

<?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> 

und

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> 

Hoffe, es hilft!

0

Hier ist, wie Sie es tun. Zum Ressourcen> styles.xml und überschreiben die das Thema itemBackgroud Attributwert wie folgt:

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

Wenn dies nicht funktioniert, überprüfen Sie in AndroidManifet.xml, die Sie wirklich das gleiche Thema bei App verwenden Ebene:

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

    ... 

</application>