Czy mogę zmienić kolor tła elementu menu w systemie Android?
Daj mi znać, jeśli ktoś ma jakieś rozwiązanie tego problemu. Ostatnią opcją będzie oczywiście dostosowanie go, ale czy istnieje sposób na zmianę koloru tekstu bez dostosowywania go.
Czy mogę zmienić kolor tła elementu menu w systemie Android?
Daj mi znać, jeśli ktoś ma jakieś rozwiązanie tego problemu. Ostatnią opcją będzie oczywiście dostosowanie go, ale czy istnieje sposób na zmianę koloru tekstu bez dostosowywania go.
Odpowiedzi:
Jedna prosta linia w Twoim motywie :)
źródło
actionBarStyle
na przykład. To nie zadziała wewnątrzactionBarStyle
, nawet jeśli wydaje się to logiczne!<item name="actionMenuTextColor">@color/your_color</item>
, nie używaj przestrzeni nazw Androidatheme
atrybut na pasku narzędzi, zadziała.Wygląda na to, że plik
w moim motywie i
w styles.xml zmieniają styl elementów listy, ale nie elementów menu.
źródło
android:itemTextAppearance
Atrybut nie może być umieszczony w stylu, którego rodzic jestparent="@android:style/Widget.Holo.ListPopupWindow"
od tego nie uczyni prawidłowo. Musi być w stylu najwyższego poziomu, takim jak ten, którego rodzicem jestandroid:Theme.Holo.Light.DarkActionBar
.Theme.Holo
lubTheme.Holo.Light.DarkActionBar
lub podobny.Możesz łatwo zmienić kolor
MenuItem
tekstu, używającSpannableString
zamiastString
.źródło
menu.findItem(R.id.menu_item_id);
zamiastmenu.getItem()
Jeśli używasz nowego paska narzędzi z motywem
Theme.AppCompat.Light.NoActionBar
, możesz stylizować go w następujący sposób.Zgodnie z wynikami, które otrzymałem,
android:textColorPrimary
to kolor tekstu wyświetlający nazwę Twojej aktywności, który jest podstawowym tekstem paska narzędzi.android:textColorSecondary
to kolor tekstu napisów i przycisku więcej opcji (3 kropki). (Tak, zmienił kolor zgodnie z tą właściwością!)android:textColor
Jest kolorem wszystkich innych tekstów, w tym menu.Na koniec ustaw motyw na pasku narzędzi
źródło
android:actionMenuTextColor
(patrz stackoverflow.com/a/5538709/423105 ).Jeśli używasz menu jako,
<android.support.design.widget.NavigationView />
po prostu dodaj poniższy wierszNavigationView
:Dostępny również odcień koloru dla ikony, zastąpi on również kolor ikony. W tym celu musisz dodać poniższy wiersz:
Przykład:
Mam nadzieję, że to ci pomoże.
źródło
Robiłem to programowo w ten sposób:
źródło
jak widzisz w tym pytaniu powinieneś:
Powyższy kod zmienia kolor tekstu pozycji czynności menu dla API> = v21.
Powyżej znajduje się kod API <v21
źródło
Użyłem tagu HTML, aby zmienić kolor tekstu pojedynczego elementu, gdy element menu jest zawyżony. Mam nadzieję, że to byłoby pomocne.
źródło
NAJPROSTSZY sposób tworzenia niestandardowego koloru menu dla pojedynczego paska narzędzi, a nie dla AppTheme
zwykły pasek narzędzi w styles.xml
nasz niestandardowy styl paska narzędzi
źródło
w Kotlinie napisałem te rozszerzenia:
i używane w ten sposób:
źródło
Krótka odpowiedź brzmi: TAK. Szczęściarz!
Aby to zrobić, musisz zastąpić niektóre style domyślnych stylów Androida:
Najpierw spójrz na definicję motywów w systemie Android:
Tak więc wygląd tekstu w menu znajduje się w
@android:style/TextAppearance.Widget.IconMenu.Item
Teraz, w definicji stylów :
Więc teraz mamy nazwę danego koloru, jeśli spojrzysz na folder kolorów zasobów systemu:
Wreszcie, oto, co musisz zrobić:
Zastąp „TextAppearance.Widget.IconMenu.Item” i utwórz własny styl. Następnie połącz go z własnym selektorem, aby dostosować go do swoich potrzeb. Mam nadzieję, że to ci pomoże. Powodzenia!
źródło
Menu opcji w systemie Android można dostosować, aby ustawić tło lub zmienić wygląd tekstu. Nie można zmienić koloru tła i tekstu w menu za pomocą motywów i stylów. Kod źródłowy Androida (data \ res \ layout \ icon_menu_item_layout.xml) używa niestandardowego elementu klasy „com.android.internal.view.menu.IconMenuItem” widoku dla układu menu. Możemy dokonać zmian w powyższej klasie, aby dostosować menu. Aby osiągnąć to samo, użyj klasy fabrycznej LayoutInflater i ustaw kolor tła i tekstu dla widoku.
źródło
03-23 19:45:25.134: E/AndroidRuntime(26761): java.lang.IllegalStateException: A factory has already been set on this LayoutInflater
Dzięki za przykładowy kod. Musiałem go zmodyfikować, aby działał z menu kontekstowym. To jest moje rozwiązanie.
U mnie to działa z Androidem 1.6, 2.03 i 4.03.
źródło
znalazłem to Eureka !!
w motywie aplikacji:
oto motyw paska akcji:
a oto motyw wyskakującego okienka:
Twoje zdrowie ;)
źródło
aby zmienić kolor tekstu pozycji menu użyj poniższego kodu
gdzie
źródło
Dzięki max.musterman, oto rozwiązanie, które uzyskałem na poziomie 22:
Zakodowany na stałe
Color.BLACK
mógłby stać się dodatkowym parametremsetMenuTextColor
metody. Użyłem tego tylko do pozycji menu, które byłyandroid:showAsAction="never"
.źródło
Możesz ustawić kolor programowo.
źródło
Dodanie tego do mojego styles.xml zadziałało
źródło
Po prostu dodaj to do swojego motywu
Testowane na API 21
źródło
<style name="AppTheme.ItemTextStyle" parent="@android:style/TextAppearance.Widget">
, w przeciwnym razie tekst będzie wyglądał za mały w rozszerzonym menu. Pamiętaj również, że ta technika działa tylko w systemie Android 5 i nowszych.źródło
Moja sytuacja to ustawienia koloru tekstu w menu opcji (główne menu aplikacji pokazane po naciśnięciu przycisku menu).
Testowane w API 16 z biblioteką appcompat-v7-27.0.2 ,
AppCompatActivity
dlaMainActivity
iAppCompat
motywem dla aplikacji w AndroidManifest.xml .styles.xml :
Nie wiem, czy
textColorSecondary
ma to wpływ na inne elementy, ale steruje kolorem tekstu menu.Przeszukałem kilka przykładów na ten temat, ale wszystkie gotowe do użycia fragmenty nie działały.
Dlatego chciałem to zbadać z kodem źródłowym biblioteki appcompat-v7 (szczególnie z folderem res pakietu .aar ).
Chociaż w moim przypadku użyłem Eclipse z eksplodowanymi zależnościami .aar . Mogłem więc zmienić domyślne style i sprawdzić wyniki. Nie wiem, jak rozbić biblioteki, które mają być używane bezpośrednio z Gradle lub Android Studio . Zasługuje na kolejny wątek śledztwa.
Więc moim celem było znalezienie koloru w pliku res / values / values.xml używanego w tekście menu (byłem prawie pewien, że kolor tam jest).
#f00
wartość do wszystkich.secondary_text_default_material_light
elementem kolorowym.@color/abc_secondary_text_material_light
.Base.ThemeOverlay.AppCompat.Light
iPlatform.AppCompat.Light
.android:textColorSecondary
orazandroid:textColorTertiary
wBase.ThemeOverlay.AppCompat.Light
.android:textColorSecondary
.Theme.AppCompat.Light
a nieThemeOverlay.AppCompat.Light
).Base.ThemeOverlay.AppCompat.Light
. Miał dzieckoThemeOverlay.AppCompat.Light
.ThemeOverlay.AppCompat.Light
, znalazłem jego użycie wBase.Theme.AppCompat.Light.DarkActionBar
motywie jakoactionBarPopupTheme
wartość atrybutu.Theme.AppCompat.Light.DarkActionBar
był potomkiem znalezionego,Base.Theme.AppCompat.Light.DarkActionBar
więc mogłem użyć tego atrybutu w pliku styles.xml bez problemu .ThemeOverlay.AppCompat.Light
i zmieniłemandroid:textColorSecondary
atrybut.źródło
Rozwiązanie Sephy nie działa. Możliwe jest nadpisanie wyglądu tekstu pozycji menu opcji za pomocą metody opisanej powyżej, ale nie elementu lub menu. Aby to zrobić, istnieją zasadniczo 3 sposoby:
Więcej wskazówek można znaleźć w numerze 4441: Motyw menu opcji niestandardowych .
źródło
wypróbuj ten kod ....
źródło
java.lang.IllegalStateException: A factory has already been set on this LayoutInflater
Jeśli chcesz ustawić kolor dla pojedynczego elementu menu, dostosowywanie motywu paska narzędzi nie jest właściwym rozwiązaniem. Aby to osiągnąć, możesz skorzystać z android: actionLayout i widoku akcji dla elementu menu.
Najpierw utwórz plik układu XML dla widoku akcji. W tym przykładzie używamy przycisku jako widoku akcji:
menu_button.xml
W powyższym fragmencie kodu używamy
android:textColor="?android:attr/colorAccent"
do dostosowania koloru tekstu przycisku.Następnie w pliku układu XML dla menu umieść,
app:actionLayout="@layout/menu_button"
jak pokazano poniżej:main_menu.xml
Ostatnia zmiana
onCreateOptionsMenu()
metody w swoim działaniu:... lub fragment:
Więcej informacji na temat widoków akcji można znaleźć w podręczniku programisty Androida .
źródło
Oto jak można pokolorować konkretną pozycję menu kolorem, działa na wszystkich poziomach API:
W ten sposób tracisz efekt selektora tła, więc oto kod do zastosowania niestandardowego selektora tła do wszystkich elementów podrzędnych pozycji menu.
Oto również funkcja pomocnicza:
źródło
Aby zmienić kolor tekstu, możesz po prostu ustawić widok niestandardowy dla MenuItem, a następnie zdefiniować kolor tekstu.
Przykładowy kod: MenuItem.setActionView ()
źródło