Quelle est la couleur par défaut du texte dans la vue textuelle?


87

J'ai défini la couleur sur rouge, et après cela, je veux rétablir la couleur par défaut, mais je ne sais pas quelle est la couleur par défaut, est-ce que quelqu'un le sait?

Réponses:


87

Vous pouvez enregistrer l'ancienne couleur, puis l'utiliser pour restaurer la valeur d'origine. Voici un exemple:

ColorStateList oldColors =  textView.getTextColors(); //save original colors
textView.setTextColor(Color.RED);
....
textView.setTextColor(oldColors);//restore original colors

Mais en général, la TextViewcouleur du texte par défaut est déterminée à partir du thème actuel appliqué à votre Activity.


La solution la plus correcte. Conserver les états de couleur du texte (désactivé, etc.)
dasar

D'après mon observation, la couleur du texte définie par le thème n'est pas héritée par TextView ajouté dynamiquement à partir du code. Il apparaît toujours en blanc quel que soit le thème sombre / clair.
shiouming

1
@shiouming Dépend du contexte utilisé. Chaque constructeur utilise un contexte, et dans ce contexte, un thème est défini (généralement par défaut). Si nécessaire, utilisez TextView (Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)
Bonatti

109

En fait, la couleur TextView est:

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

ou

#808080

4
C'est la couleur du texte de l'indicateur d'onglet par défaut. Dans de nombreux cas, cela peut être la même que la couleur du texte par défaut, mais je ne m'y fierais pas.
k2col

6
Très proche, mais cette couleur n'est pas la même.
LukaszTaraszka

2
@LukTar a raison, j'ai utilisé Photoshop et vérifié la couleur ... # 737373 est la couleur du texte de la vue textuelle à partir d'un échantillon de pixels ponctuels (taille de la zone d'échantillon d'un pixel) sur une vue zoomée à 1000% dans le studio Android ... vous devez regarder le style par défaut de l'application pour obtenir la valeur réelle de n'importe quelle application particulière ...
me_

40

Certaines couleurs par défaut sont définies dans android.R.color

int c = getResources().getColor(android.R.color.primary_text_dark);

4
Il devrait être int c = ...au lieu deColor c = ...
Kevin Cruijssen

7
À partir du niveau 23 de l'API, getResources().getColor(int id)est désormais obsolète (voir lien ). Vous pouvez utiliser getResources().getColor (int id, Resources.Theme theme)ouContextCompat.getColor(contex, android.R.color.primary_text_dark)
InfectedPacket

primary_text_dark est maintenant obsolète mais aucune idée pourquoi :(
Impulse The Fox

15

Obtenez ces valeurs à partir des attributs:

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

Cela semble sélectionner correctement la couleur en fonction du thème et se mettre à jour, par exemple, si l'application est en mode nuit.
Brill Pappin

Pour obtenir le TypedArray du thème actuel, appelez-le sans le thème arg: TypedArray a = getTheme (). GetStyledAttributes (attrs);
petrsyn

Cela n'obtiendra une couleur appropriée que si le thème utilise réellement textColorSecondary. Puisqu'il est possible de remplacer cela dans un thème ou un style, ce n'est pas une manière très précise de déterminer quelle sera réellement la couleur de texte par défaut pour une vue particulière. Notez également que les vues individuelles peuvent désormais avoir un thème, de sorte que le thème associé au contexte de la vue doit être utilisé au lieu de supposer que le thème de l'activité est en vigueur pour toutes ses vues.
Lorne Laliberte

6

Il y a des valeurs par défaut dans le thème qu'Android utilise si vous ne spécifiez pas de couleur de texte. Il peut s'agir de couleurs différentes dans diverses interfaces utilisateur Android (par exemple, HTC Sense, Samsung TouchWiz, etc.). Android a un thème _darket _light, donc les paramètres par défaut sont différents pour ceux-ci (mais presque noirs dans les deux dans Android vanilla). Il est cependant recommandé de définir vous-même votre couleur de texte principale afin de fournir un style cohérent sur tous les appareils.

Dans du code:

getResources().getColor(android.R.color.primary_text_dark);
getResources().getColor(android.R.color.primary_text_light);

En xml:

android:color="@android:color/primary_text_dark"
android:color="@android:color/primary_text_light"

Comme référence dans Android vanilla, la couleur du texte du thème sombre est #060001et le thème clair #060003depuis l'API v1. Voir la classe de style Android ici


Les couleurs référencées dans votre dernier lien ne sont en fait pas du tout des couleurs, ce ne sont que des valeurs android.R utilisées pour rechercher la couleur. Vous pouvez rechercher les couleurs par défaut en trouvant la couleur dans ce répertoire et en recherchant la référence de couleur de base dans ce fichier .xml .
Alex Gittemeier

5

Je sais que c'est vieux mais selon mon propre éditeur de thème avec le thème de lumière par défaut, par défaut

textPrimaryColor = #000000

et

textColorPrimaryDark = #757575

2

J'ai utilisé un sélecteur de couleur sur la vue de texte et j'ai obtenu ce # 757575


2

Cela peut ne pas être possible dans toutes les situations, mais pourquoi ne pas simplement utiliser la valeur d'un TextView aléatoire différent qui existe dans la même activité et qui porte la couleur que vous recherchez?

txtOk.setTextColor(txtSomeOtherText.getCurrentTextColor());

0

Il n'y a pas de couleur par défaut. Cela signifie que chaque appareil peut avoir son propre.


7
Non, il y a des couleurs par défaut, juste que chaque distribution Android peut les écraser
Patrick Favre

@ for3st Connaissez-vous des cas où cela change-t-il?
développeur android

0

Je crois que la valeur entière de couleur par défaut est 16711935 (0x00FF00FF).


12
wow trucs codés en dur, vous savez. Était-ce la valeur de toutes les versions d'Android sur tous les appareils et avec tous les thèmes sélectionnables?! Blague, vous savez ... :)
Bondax

1
La couleur du texte par défaut dans Android est donc le rose? Je pense que c'est plus en ligne avec # 060001 developer.android.com/reference/android/...
Patrick Favre

0

hey tu peux essayer ça

ColorStateList colorStateList = textView.getTextColors();
String hexColor = String.format("#%06X", (0xFFFFFF & colorStateList.getDefaultColor()));

0

J'ai trouvé que cela android:textColor="@android:color/secondary_text_dark"fournit un résultat plus proche de la couleur TextView par défaut que android:textColor="@android:color/tab_indicator_text". Je suppose que vous devez basculer entre secondary_text_dark / light en fonction du thème que vous utilisez


0

Vous pouvez utiliser TextView.setTag / getTag pour stocker la couleur d'origine avant d'apporter des modifications. Je suggérerais de créer une ressource d'identifiant unique dans ids.xml pour différencier les autres balises si vous en avez.

avant de définir d'autres couleurs:

if (textView.getTag(R.id.txt_default_color) == null) {
    textView.setTag(R.id.txt_default_color, textView.currentTextColor)
}

Changer de dos:

textView.getTag(R.id.txt_default_color) as? Int then {
    textView.setTextColor(this)
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.