Стиль Android/тема только диалогового окна поиска

tl;dr: Белый стиль текста в теме приложения подхватывается диалоговым окном поиска, что делает поисковый текст невидимым.

Я сильно борюсь с тем, что кажется тривиальной проблемой.

В моем приложении используется темный фон, и я настроил цвет текста, чтобы он был ярче стандартного серого, используя #EEEEEE.

Я реализовал диалоговое окно поиска (до Honeycomb), и оно работает хорошо, но текст в диалоговом окне поиска показывает тот же #EEEEEE, поэтому он практически невидим. Даже контекстное меню, отображаемое, когда я долго нажимаю на текст поиска, подбирает #EEEEEE, поэтому текст там также невидим.

Я рву на себе волосы, и у меня кончаются волосы.

Стиль:

<style name="master" paret="@android:style/Theme.NoTitleBar">
    <item name="android:textColor">#EEEEEE</item>
    <item name="android:windowNoTitle">true</item>        
</style>

Манифест:

<application android:icon="@drawable/icon"
             android:label="@string/app_label"
             android:theme="@style/master"
             android:hardwareAccelerated="true"
             android:debuggable="true"> 

person Mark Phillip    schedule 25.09.2011    source источник
comment
использовать другой цвет для textColor?   -  person Yashwanth Kumar    schedule 25.09.2011
comment
Привет, @YashwanthKumar, мне нужен светлый цвет в моем приложении и темный цвет в диалоговом окне поиска. Я видел это повсюду, просто не могу понять, как это сделать самому.   -  person Mark Phillip    schedule 25.09.2011


Ответы (2)


Атрибут android:textColor не предназначен для использования внутри стилей темы, он в первую очередь полезен в стилях оформления виджетов и текста.

Если вы хотите изменить общий цвет текста с помощью темы, используйте вместо этого семейство атрибутов android:textColor*. Их довольно много, и разные представления используют их по-разному, так что нужно немного поэкспериментировать (или внимательно изучить исходный код Android), чтобы все получилось правильно. Все они перечислены в документации android.R.attr. Найдите атрибуты, начинающиеся с textColor....

Для начала попробуйте эту тему, она будет вести себя лучше, вообще не влияя на цвета диалогового окна поиска, что, кажется, именно то, что вам нужно. Кстати, вам не нужно устанавливать android:windowNoTitle в true в вашей теме, так как ваша родительская тема уже делает это:

<style name="master" parent="@android:style/Theme.NoTitleBar">
    <item name="android:textColorPrimary">#EEEEEE</item>
    <item name="android:textColorSecondary">#EEEEEE</item>
    <item name="android:textColorTertiary">#EEEEEE</item>
</style>
person Martin Nordholts    schedule 20.10.2011
comment
Да! Я назову своего первенца Мартином. - person Mark Phillip; 23.10.2011
comment
Как и я! Та же проблема, большое спасибо за полезный ответ. - person Eric Mill; 22.12.2011

Я столкнулся с той же проблемой, что и вы. Я искал решение, но кажется, что вы просто не можете изменить textColor диалогового окна. Мое решение заключалось в создании пользовательского диалога на основе этого руководства: http://blog.androgames.net/10/custom-android-dialog/

Я значительно расширил это на основе исходного кода Android, всегда используя одни и те же имена методов и т. д., чтобы сделать его немного проще.

Это не идеальный вариант, но, насколько я знаю, это лучший вариант...

РЕДАКТИРОВАТЬ: для вашей проблемы может быть более простое решение: не помещайте textColor в тему, а помещайте его в стиль. Я не знаю, как вы стилизуете свое приложение, но я обычно создаю «мастер-стиль», от которого наследуются все остальные (прямые или косвенные). Затем вы можете поместить туда textColor, чтобы все ваши стандартные диалоги по-прежнему имели стандартный textColor.

person Maria Neumayer    schedule 17.10.2011