Який колір тексту за замовчуванням у текстовому режимі?


87

Я встановлюю колір на червоний, а після цього хочу знову встановити колір за замовчуванням, але я не знаю, що це за колір за замовчуванням, хтось знає?

Відповіді:


87

Ви можете зберегти старий колір, а потім використовувати його для відновлення початкового значення. Ось приклад:

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

Але загалом TextViewколір тексту за замовчуванням визначається з поточної теми, застосованої до вашого Activity.


Найбільш правильне рішення. Зберегти стан кольорів тексту (вимкнено тощо)
dasar

З мого спостереження, колір тексту, визначений темою, не успадковується TextView, динамічно доданим із коду. Він завжди відображається білим, незалежно від темної / світлої теми.
shiouming

1
@shiouming Залежить від використовуваного контексту. Кожен конструктор використовує контекст, і в цьому контексті встановлюється тема (зазвичай за замовчуванням). Якщо потрібно, використовуйте TextView (контекст контексту, AttributeSet attrs, int defStyleAttr, int defStyleRes)
Бонатті

109

Насправді колір TextView такий:

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

або

#808080

4
Це колір тексту індикатора вкладки за замовчуванням. У багатьох випадках він може збігатися із кольором тексту за замовчуванням, але я б не покладався на нього.
k2col

6
Дуже близько, але цей колір не однаковий.
Лукаш Тарашка

2
@LukTar має рацію, я використовував фотошоп і перевіряв колір ... # 737373 - це текст тексту текстового перегляду з вибірки точкових пікселів (розмір області вибірки один піксель) у вигляді, збільшеному до 1000% в android studio ... я думаю вам потрібно подивитися на стиль програми за замовчуванням, щоб отримати фактичне значення для будь-якої програми для
деталей,

40

Є деякі кольори за замовчуванням, визначені в android.R.color

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

4
Це має бути int c = ...замістьColor c = ...
Kevin Cruijssen

7
Що стосується рівня23 API, getResources().getColor(int id)він тепер застарілий (див. Посилання ). Ви можете або використовувати, getResources().getColor (int id, Resources.Theme theme)абоContextCompat.getColor(contex, android.R.color.primary_text_dark)
InfectedPacket

primary_text_dark тепер застарілий, але не знаю, чому :(
Impulse The Fox

15

Отримати ці значення з атрибутів:

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

Схоже, він буде правильно підбирати колір на основі теми та, наприклад, оновлюватиметься, якщо програма перебуває в нічному режимі.
Брилл Паппін,

Щоб отримати TypedArray для поточної теми, зателефонуйте їй без аргументу Theme: TypedArray a = getTheme (). GetStyledAttributes (attrs);
petrsyn

Це отримає відповідний колір, лише якщо тема насправді використовує textColorSecondary. Оскільки це можна замінити в темі чи стилі, це не дуже точний спосіб визначити, яким кольором тексту за замовчуванням буде конкретний вигляд. Також зауважте, що окремі подання тепер можуть бути тематизованими, тому тему, пов’язану з контекстом подання, слід використовувати замість того, щоб припускати, що тема діяльності діє для всіх її поглядів.
Lorne Laliberte

6

У темі за замовчуванням використовується Android, якщо ви не вказали колір тексту. Це можуть бути різні кольори в різних інтерфейсах користувача Android (наприклад, HTC Sense, Samsung TouchWiz тощо). Android має _darkі_light тему , тому за замовчуванням для них різні (але майже чорні в обох у ванільному андроїді). Однак є гарною практикою самостійно визначати свій основний колір тексту, щоб забезпечити послідовний стиль на всіх пристроях.

У коді:

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

У xml:

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

Як посилання у ванільному Android, колір тексту темної теми є, #060001а світлий -#060003 з API v1. Дивіться клас Android-стилю тут


Кольори, на які посилається ваше останнє посилання, насправді взагалі не є кольорами, це лише значення android.R, які використовуються для пошуку кольору. Ви можете шукати кольори за замовчуванням, знаходячи колір у цьому каталозі та шукаючи посилання на базовий колір у цьому .xml-файлі .
Алекс Гіттемайер,

5

Я знаю, що він старий, але відповідно до мого власного редактора тем із легкою темою за замовчуванням, за замовчуванням

textPrimaryColor = #000000

і

textColorPrimaryDark = #757575


2

Можливо, це можливо не у всіх ситуаціях, але чому б просто не використати значення іншого випадкового TextView, який існує в одній і тій самій діяльності та містить колір, який ви шукаєте?

txtOk.setTextColor(txtSomeOtherText.getCurrentTextColor());

0

Колір за замовчуванням відсутній. Це означає, що кожен пристрій може мати свій власний.


7
Ні, там немає кольорів за замовчуванням, просто кожен дистрибутив Android може їх перезаписати
Patrick Favre

@ for3st Чи знаєте ви випадки, коли вони це змінюють?
розробник Android

0

Я вважаю, що значення цілого кольору за замовчуванням - 16711935 (0x00FF00FF).


12
вау, закодовані речі, ти знаєш. Це було значення для всіх версій Android на всіх пристроях та з усіма темами, які можна вибрати ?! Жартую, ти знаєш ... :)
Бондакс

1
Тож типовим кольором тексту в android є рожевий? Думаю, це більше відповідає # 060001 developer.android.com/reference/android/…
Патрік Фавр

0

Гей, ви можете спробувати це

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

0

Я виявив, що android:textColor="@android:color/secondary_text_dark"забезпечує ближчий результат до кольору TextView за замовчуванням, ніж android:textColor="@android:color/tab_indicator_text". Припускаю, вам доведеться перемикатися між вторинним_текстом_темні / світлом залежно від теми, яку ви використовуєте


0

Ви можете використовувати TextView.setTag / getTag для збереження вихідного кольору перед внесенням змін. Я б запропонував створити унікальний ресурс ідентифікатора в ids.xml, щоб диференціювати інші теги, якщо у вас є.

перед налаштуванням інших кольорів:

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

Зміна назад:

textView.getTag(R.id.txt_default_color) as? Int then {
    textView.setTextColor(this)
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.