Ustawiam kolor na czerwony, a potem chcę ponownie ustawić kolor z powrotem na domyślny, ale nie wiem jaki jest kolor domyślny, czy ktoś wie?
90
Możesz zapisać stary kolor, a następnie użyć go do przywrócenia oryginalnej wartości. Oto przykład:
ColorStateList oldColors = textView.getTextColors(); //save original colors
textView.setTextColor(Color.RED);
....
textView.setTextColor(oldColors);//restore original colors
Ale ogólnie domyślny TextView
kolor tekstu jest określany na podstawie bieżącego motywu zastosowanego do Twojego Activity
.
Właściwie kolor TextView to:
android:textColor="@android:color/tab_indicator_text"
lub
#808080
źródło
Istnieje kilka domyślnych kolorów zdefiniowanych w programie
android.R.color
int c = getResources().getColor(android.R.color.primary_text_dark);
źródło
int c = ...
zamiastColor c = ...
getResources().getColor(int id)
jest przestarzałe (patrz link ). Możesz użyćgetResources().getColor (int id, Resources.Theme theme)
alboContextCompat.getColor(contex, android.R.color.primary_text_dark)
Uzyskaj te wartości z atrybutów:
int[] attrs = new int[] { android.R.attr.textColorSecondary }; TypedArray a = getTheme().obtainStyledAttributes(R.style.AppTheme, attrs); DEFAULT_TEXT_COLOR = a.getColor(0, Color.RED); a.recycle();
źródło
W motywie używanym przez system Android są ustawienia domyślne, jeśli nie określisz koloru tekstu. Może mieć różne kolory w różnych interfejsach użytkownika systemu Android (np. HTC Sense, Samsung TouchWiz itp.). Android ma motyw
_dark
i_light
, więc wartości domyślne są dla nich różne (ale prawie czarne w obu z nich w waniliowym Androidzie). Dobrą praktyką jest jednak samodzielne zdefiniowanie podstawowego koloru tekstu, aby zapewnić spójny styl na wszystkich urządzeniach.W kodzie:
getResources().getColor(android.R.color.primary_text_dark); getResources().getColor(android.R.color.primary_text_light);
W xml:
android:color="@android:color/primary_text_dark" android:color="@android:color/primary_text_light"
Jako odniesienie w waniliowym Androidzie kolor tekstu ciemnego motywu jest,
#060001
a w jasnym motywie jest to#060003
od API v1. Zobacz klasę stylu Androida tutajźródło
Wiem, że jest stary, ale według mojego własnego edytora motywów z domyślnym lekkim motywem, domyślnie
textPrimaryColor = #000000
i
textColorPrimaryDark = #757575
źródło
Użyłem próbnika kolorów w widoku tekstu i otrzymałem numer 757575
źródło
Może nie być to możliwe we wszystkich sytuacjach, ale dlaczego po prostu nie użyć wartości innego losowego TextView, który istnieje w tym samym działaniu i ma kolor, którego szukasz?
txtOk.setTextColor(txtSomeOtherText.getCurrentTextColor());
źródło
Nie ma domyślnego koloru. Oznacza to, że każde urządzenie może mieć własne.
źródło
Uważam, że domyślna wartość całkowita koloru to 16711935 (0x00FF00FF).
źródło
ColorStateList colorStateList = textView.getTextColors(); String hexColor = String.format("#%06X", (0xFFFFFF & colorStateList.getDefaultColor()));
źródło
Zauważyłem, że
android:textColor="@android:color/secondary_text_dark"
zapewnia wynik bliższy domyślnemu kolorowi TextView niżandroid:textColor="@android:color/tab_indicator_text"
. Przypuszczam, że musisz przełączać się między second_text_dark / light w zależności od motywu, którego używaszźródło
Możesz użyć TextView.setTag / getTag do przechowywania oryginalnego koloru przed wprowadzeniem zmian. Sugerowałbym utworzenie unikalnego zasobu id w ids.xml w celu rozróżnienia innych tagów, jeśli masz.
przed ustawieniem na inne kolory:
if (textView.getTag(R.id.txt_default_color) == null) { textView.setTag(R.id.txt_default_color, textView.currentTextColor) }
Zmiana z powrotem:
textView.getTag(R.id.txt_default_color) as? Int then { textView.setTextColor(this) }
źródło