Jaki jest domyślny kolor tekstu w widoku tekstu?

90

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?

Lukap
źródło

Odpowiedzi:

89

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 TextViewkolor tekstu jest określany na podstawie bieżącego motywu zastosowanego do Twojego Activity.

inazaruk
źródło
Najbardziej poprawne rozwiązanie. Zachowaj stany koloru tekstu (wyłączone itp.)
dasar
Z moich obserwacji wynika, że ​​kolor tekstu zdefiniowany przez motyw nie jest dziedziczony przez TextView dodawany dynamicznie z kodu. Zawsze pojawia się w kolorze białym, niezależnie od ciemnego / jasnego motywu.
shiouming
2
@shiouming Zależy od używanego kontekstu. Każdy konstruktor używa kontekstu, aw tym kontekście ustawiany jest motyw (zwykle jest to ustawienie domyślne). W razie potrzeby użyj TextView (kontekst kontekstowy, atrybuty AttributeSet, int defStyleAttr, int defStyleRes)
Bonatti
110

Właściwie kolor TextView to:

android:textColor="@android:color/tab_indicator_text"

lub

#808080
Alex Zaraos
źródło
4
To jest domyślny kolor tekstu wskaźnika zakładki. W wielu przypadkach może być taki sam jak domyślny kolor tekstu, ale nie polegałbym na tym.
k2col
6
Bardzo blisko, ale ten kolor to nie to samo.
Łukasz Taraszka
2
@LukTar ma rację, użyłem Photoshopa i sprawdziłem kolor ... # 737373 to kolor tekstu widoku tekstu z próbki pikseli punktowych (rozmiar obszaru próbki jednego piksela) na widoku powiększonym do 1000% w Android Studio ... myślę, że musisz jednak spojrzeć na domyślny styl aplikacji, aby uzyskać rzeczywistą wartość dla dowolnej konkretnej aplikacji ...
me_
41

Istnieje kilka domyślnych kolorów zdefiniowanych w programie android.R.color

int c = getResources().getColor(android.R.color.primary_text_dark);
davenpcj
źródło
4
Powinien być int c = ...zamiastColor c = ...
Kevin Cruijssen
7
Od poziomu API 23 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)
InfectedPacket
primary_text_dark jest teraz przestarzały, ale nie mam pojęcia dlaczego :(
Impulse The Fox
15

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();
Bondax
źródło
Wygląda na to, że prawidłowo wybierze kolor na podstawie motywu i zostanie zaktualizowany, na przykład, jeśli aplikacja jest w trybie nocnym.
Brill Pappin
Aby pobrać TypedArray dla bieżącego motywu, wywołaj go bez argumentu Theme: TypedArray a = getTheme (). GetStyledAttributes (attrs);
petrsyn
Odpowiedni kolor zostanie uzyskany tylko wtedy, gdy motyw faktycznie używa textColorSecondary. Ponieważ można to zmienić w motywie lub stylu, nie jest to bardzo dokładny sposób określania, jaki będzie domyślny kolor tekstu w określonym widoku. Należy również zauważyć, że można teraz przypisać temat do poszczególnych widoków, dlatego należy używać motywu skojarzonego z kontekstem widoku, zamiast zakładać, że motyw działania obowiązuje dla wszystkich jego widoków.
Lorne Laliberte
6

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 _darki _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, #060001a w jasnym motywie jest to #060003od API v1. Zobacz klasę stylu Androida tutaj

Patrick Favre
źródło
Kolory, do których odwołuje się Twój ostatni link, w rzeczywistości nie są kolorami, to tylko wartości android.R, które są używane do sprawdzania koloru. Możesz sprawdzić domyślne kolory, znajdując kolor w tym katalogu i sprawdzając odniesienie koloru podstawowego w tym pliku .xml .
Alex Gittemeier
5

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
Ahmad Reza Enshaee
źródło
2

Użyłem próbnika kolorów w widoku tekstu i otrzymałem numer 757575

dave o grady
źródło
2

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());
Gdakanie
źródło
0

Nie ma domyślnego koloru. Oznacza to, że każde urządzenie może mieć własne.

piotrpo
źródło
7
Nie istnieją domyślne kolory, tak, że każda dystrybucja android może je zastąpić
Patrick Favre
@ for3st Czy znasz przypadki, w których oni to zmieniają?
programista Androida
0

Uważam, że domyślna wartość całkowita koloru to 16711935 (0x00FF00FF).

C Nick
źródło
12
wow, zakodowane na stałe rzeczy, wiesz. Czy to była wartość dla wszystkich wersji Androida na wszystkich urządzeniach i ze wszystkimi wybranymi motywami ?! Żartujesz, wiesz ... :)
Bondax
1
Więc domyślny kolor tekstu w Androidzie to różowy? Myślę, że jest bardziej zintegrowany z # 060001 developer.android.com/reference/android/ ...
Patrick Favre,
0

hej, możesz tego spróbować

ColorStateList colorStateList = textView.getTextColors();
String hexColor = String.format("#%06X", (0xFFFFFF & colorStateList.getDefaultColor()));
Vivek Pratap Singh
źródło
0

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

quealegriamasalegre
źródło
0

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)
}
Arst
źródło