8

mam pozycje menu w mojej aplikacji, i chciałbym zmienić kolor poz tle, gdy zostanie kliknięty (patrz zrzut ekranu - pozycja 1 kliknięciu)Ustaw kolor pozycja menu tła przy aktywowaniu w Androidzie

item 1 is clicked

Chcę tylko jednego koloru - jasnoniebieskiego lub ciemnego. Jednak, jak widać, są dwa z nich na pierwszym elemencie.

Oto mój kod:

Pasek aktywności:

<android.support.v7.widget.Toolbar 
      xmlns:sothree="http://schemas.android.com/apk/res-auto" 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/main_toolbar" 
      sothree:theme="@style/MyActionBar" 
      android:layout_alignParentTop="true" 
      style="@style/toolbarButton"> 

      ... 

     </android.support.v7.widget.Toolbar> 

Style:

<style name="toolbarButton"> 
     <item name="android:layout_width">match_parent</item> 
     <item name="android:layout_height">wrap_content</item> 
     <item name="android:clickable">true</item> 
    </style> 
    <style name="MyActionBar" 
     parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"> 
     <item name="android:background">@color/material_dark_blue</item> 
     <item name="android:displayOptions">showHome|homeAsUp|showTitle</item> 
     <item name="android:icon">@android:color/transparent</item> 
     <item name="android:centerX">@android:integer/config_shortAnimTime</item> 
     <item name="windowActionBar">false</item> 
    </style> 
    <style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> 
     <item name="android:textColor">@color/material_white</item> 
     <item name="android:popupMenuStyle">@style/CustomOverflowBack</item> 
     <item name="android:itemTextAppearance">@android:color/white</item> 
    </style> 

Oczywisty:

<application 
     android:name=".MyApplication" 
     android:allowBackup="true" 
     android:hardwareAccelerated="false" 
     android:icon="@drawable/icon" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme"> 

Każda pomoc jest bardzo ceniona.

UPDATE: Dodawanie CustomOverflowBack:

<style name="CustomOverflowBack" parent="@android:style/Widget.Holo.Light.ListPopupWindow"> 
     <item name="android:popupBackground">@drawable/menu_item</item> 
    </style> 

Menu_item.xml

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/listview_background_shape"> 

    <stroke android:width="1dp" android:color="@color/material_dark_blue" /> 
    <solid android:color="@color/actionbar_item_bg_color" /> 

</shape> 
+0

Czy spróbować moją odpowiedź @ Tom11 –

+0

pisać swój styl "CustomOverflowBack" określona w @ styl/CustomOverflowBack – SachinS

+0

prostu usunąć @ kolor/material_dark_blue – Sheychan

Odpowiedz

2

Wymień ten

<style name="toolbarButton"> 
    <item name="android:layout_width">match_parent</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:clickable">true</item> 
</style> 
<style name="MyActionBar" 
    parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"> 
    <item name="android:background">@color/material_dark_blue</item> 
    <item name="android:displayOptions">showHome|homeAsUp|showTitle</item> 
    <item name="android:icon">@android:color/transparent</item> 
    <item name="android:centerX">@android:integer/config_shortAnimTime</item> 
    <item name="windowActionBar">false</item> 
</style> 
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> 
    <item name="android:textColor">@color/material_white</item> 
    <item name="android:popupMenuStyle">@style/CustomOverflowBack</item> 
    <item name="android:itemTextAppearance">@android:color/white</item> 
</style> 

<style name="CustomOverflowBack" parent="@android:style/Widget.Holo.Light.ListPopupWindow"> 
    <item name="android:popupBackground">@drawable/menu_item</item> 
</style> 

z tym:

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> 
    <item name="actionBarPopupTheme">@style/AppThemeOverlay.Popup</item> 
</style> 

<style name="AppThemeOverlay.Popup" parent="ThemeOverlay.AppCompat.Dark"> 
    <item name="android:colorBackground">popup menu background color</item> 
    <item name="colorControlHighlight">selected item color</item> 
</style> 

Oto jak go używać:

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?actionBarSize" 
    android:background="?colorPrimary" 
    android:elevation="4dp" 
    app:popupTheme="?actionBarPopupTheme"/> 

Powyższy wystarczy, aby działać na API 21 i powyżej.

Zostawiłem swój styl toolbarButton, ponieważ nie ma to związku z problemem.

Oto kilka wskazówek

<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"> 

Nie stosować style platformą widgetów AppCompat. Jeśli używałeś stylu AppCompat @style/Widget.AppCompat.ActionBar, musiałbyś zastąpić wirtualnie none z tych atrybutów.

<item name="android:background">@color/material_dark_blue</item> 

Tło w motywie zostanie zastosowane do każdego widoku, który go nie zastępuje. Właśnie dlatego widzisz niebieski kwadrat. android:background jest atrybutem stylu , użyj go na widgetach. android:colorBackground jest atrybutem i jest używany (między innymi) do pokolorowania android:popupBackground, który zapewnia kształt wyskakującego menu.

<item name="android:textColor">@color/material_white</item> 

Kolor tekstu jest ponownie atrybutem stylu używanym w TextViews. Powszechnie używane atrybuty kompozycji: android:textColorPrimary i android:textColorSecondary. Zamiast tego użyj tych. android:textColor w motywie może powodować nieoczekiwane/niepożądane wyniki.

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

Czy NIE umieścić zasób koloru w atrybucie wygląd styl/tekstu. Nie zadziała ani nie spowoduje awarii lub nie przyniesie niespodziewanych wyników bez awarii.

+0

Stosując to podejście, domyślny jest kolor ciemnoszary, ale potrzebuję go niebieskiego. Wygląda na to, że ColorBackground i colorControlHighlight nie działają.Użyłem twojego kodu, jednak zmieniłem app: popupTheme na android: popupTheme, jako aplikacja: rzucił mi błąd (przestrzeń nazw nie jest związana). – Tom11

+0

@ Tom11 Nie piszemy "app:" lub "android:" dla zabawy, jest różnica i jeśli coś zmienisz, to się zepsuje. Jeśli nie można znaleźć przestrzeni nazw, wybierz podkreślone zdanie, naciśnij Alt + Enter i wybierz "Szybka poprawka" Utwórz deklarację obszaru nazw. –

+0

Wielkie dzięki! Teraz działa :) – Tom11

4

@ Tom11 trzeba będzie zadeklarować własny styl Ci popup nakładkę pasku narzędzi.

utworzyć styl rozciągający ThemeOverlay:

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"> 
    <item name="android:colorBackground">@color/colorPrimaryDark</item> 
    <item name="colorControlHighlight">@color/colorAccent</item> 
</style> 

W powyższym stylu zastąpić @ kolor/colorPrimaryDark z koloru tła i koloru @/colorAccent z wybranym kolorem tła.

Następnie użyj go w swojej deklaracji paska narzędzi.

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    style="@style/toolbarButton" 
    app:popupTheme="@style/AppTheme.PopupOverlay"/> 

To rozwiąże problem.

Update: wykonaj następujące zmiany:

  1. Zmiany android:background="?attr/colorPrimary" do android:background="@color/material_dark_blue" z akcji Kolor bar tła w powyższym punkcie pasku narzędzi.

  2. Usuń <item name="android:background">@color/material_dark_blue</item> ze stylu MyActionBar.

Zatem kod aktualizowane na pasku narzędzi i MyActionBar stylu będą następujące:

<android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="@color/material_dark_blue" 
      style="@style/toolbarButton" 
      app:popupTheme="@style/AppTheme.PopupOverlay" 
      app:theme="@style/MyActionBar"/> 

<style name="MyActionBar" 
      parent="Widget.AppCompat.ActionBar"> 
     <item name="android:displayOptions">showHome|homeAsUp|showTitle</item> 
     <item name="android:icon">@android:color/transparent</item> 
     <item name="android:centerX">@android:integer/config_shortAnimTime</item> 
     <item name="windowActionBar">false</item> 
    </style> 

Należy wreszcie działać.

+0

To nie działa, kolory są nadal takie same. – Tom11

+0

To działałoby, gdyby @ Tom11 nie zastąpił 'android:' w zasobie kompozycji. –

+0

'MyActionBar' jest * stylem * a nie * motywem *. Dowiedz się różnicę i zastosuj je odpowiednio. Zacznij tutaj https://chris.banes.me/2014/11/12/theme-vs-style/ –