Какой цвет по умолчанию для текста в текстовом окне?


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 (Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)
Бонатти

109

На самом деле цвет TextView:

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

или

#808080

4
Это цвет текста индикатора вкладки по умолчанию. Во многих случаях он может быть таким же, как цвет текста по умолчанию, но я бы не стал на него полагаться.
k2col

6
Очень близко, но этот цвет не тот.
LukaszTaraszka

2
@LukTar прав, я использовал фотошоп и проверил цвет ... # 737373 - это цвет текста текстового просмотра из образца точечного пикселя (размер области образца в один пиксель) в представлении, увеличенном до 1000% в студии Android ... я думаю вам нужно взглянуть на стиль приложения по умолчанию, чтобы получить фактическое значение для любого конкретного приложения, хотя ...
me_

40

Некоторые цвета по умолчанию определены в android.R.color

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

4
Это должно быть int c = ...вместоColor c = ...
Кевин Кройссен

7
Начиная с уровня API 23, 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 для текущей темы, вызовите его без аргумента темы: TypedArray a = getTheme (). ReceiveStyledAttributes (attrs);
петрсын

Соответствующий цвет будет получен только в том случае, если тема действительно использует textColorSecondary. Поскольку это можно переопределить в теме или стиле, это не очень точный способ определения фактического цвета текста по умолчанию для конкретного представления. Также обратите внимание, что отдельные представления теперь могут быть тематическими, поэтому следует использовать тему, связанную с контекстом представления, вместо того, чтобы предполагать, что тема действия действует для всех его представлений.
Лорн Лалиберте,

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-файле .
Alex Gittemeier

5

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

textPrimaryColor = #000000

а также

textColorPrimaryDark = #757575


2

Это может быть невозможно во всех ситуациях, но почему бы просто не использовать значение другого случайного TextView, которое существует в том же Activity и имеет цвет, который вы ищете?

txtOk.setTextColor(txtSomeOtherText.getCurrentTextColor());

0

Цвета по умолчанию нет. Значит, у каждого устройства может быть свой.


7
Нет, есть цвета по умолчанию, просто каждый дистрибутив Android может их перезаписать,
Патрик Фавр,

@ for3st Знаете ли вы о случаях, когда они его меняют?
разработчик Android

0

Я считаю, что целочисленное значение цвета по умолчанию - 16711935 (0x00FF00FF).


12
ну, знаете, жестко запрограммированные вещи. Было ли это значение для всех версий Android на всех устройствах и со всеми выбираемыми темами ?! Шутка, понимаете ... :)
Bondax

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". Я полагаю, вам нужно переключаться между secondary_text_dark / light в зависимости от темы, которую вы используете


0

Вы можете использовать TextView.setTag / getTag для сохранения исходного цвета перед внесением изменений. Я бы предложил создать уникальный ресурс id в 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.