Jaki jest domyślny kolor tekstu w widoku tekstu?


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.


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

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

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();

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


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


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());

0

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


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


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()));

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


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)
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.