6

Я создаю SpinnerAdapter с помощью встроенного ресурса ID android.R.layout.simple_spinner_dropdown_itemКак изменить цвет textView android.R.layout.simple_spinner_dropdown_item?

SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.action_list, android.R.layout.simple_spinner_dropdown_item); 

но TextView, который создает, что идентификатор ресурса имеет TextColor Black и мне нужен другой цвет. Каков наилучший способ изменения цвета, но все остальное одинаково?

Когда я пытаюсь создать свой собственный ресурс макета textView в XML-файле, например.

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textColor="@color/White" 
    /> 

то он не ведет себя таким же образом, как, например, потому, что android.R.layout.simple_spinner_dropdown_item прокладка отличается. Итак,

  1. Есть ли способ создать свой собственный ресурс макета в XML-файле, который наследует все от android.R.layout.simple_spinner_dropdown_item и позволяет мне переопределить textColor?
  2. Или полное определение android.R.layout.simple_spinner_dropdown_item доступно где-нибудь?
  3. Или, может быть, есть еще более простой способ?

Этот вопрос относится к другому вопросу, который я задал сегодня (Can't change the text color with Android Action Bar drop-down navigation). Я понял, что один ответ на этот вопрос (и, следовательно, этот вопрос) заключается в создании моего собственного класса ArrayAdapter, который наследует от ArrayAdapter<T>, чтобы я всегда мог устанавливать цвет в коде всякий раз, когда используется ArrayAdapter (см. Мой ответ на этот вопрос) , Но это кажется очень громоздким решением: - |.

Изменение цвета текста не должно быть трудной задачей!

ответ

8

Is there a way of creating my own layout resource in an xml file which inherits everything from android.R.layout.simple_spinner_dropdown_item and allows me to override the textColor?

Нет, но вы можете вырезать & вставить свою любимую версию simple_spinner_dropdown_item.xml в новый файл, то просто изменить цвет текста.

Or is the complete definition of android.R.layout.simple_spinner_dropdown_item available somewhere?

Да, но существует много разных версий. Какой API вам нравится? Также вы можете иметь копию на жестком диске уже, проверьте <android-sdk>/platforms/android-xx/data/res/layout/ (где xx является частным API.)


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

+0

thx vm :-). Фактически, я уже нашел ваш альтернативный подход, но теперь вы сказали мне, где искать определения xml, я, вероятно, переключусь на это. – Stochastically

+0

+1 для вашей линии мышления ... Я добавил к вашему решению, так как это не сработает сразу без изменений. – whyoz

0

без использования пользовательского адаптера, невозможно изменить цвет

android.R.layout.simple_spinner_dropdown_item 

Лучше создать пользовательский адаптер, а затем вы можете изменить цвет, testSixe, TextStyle и т.д.

+0

хорошо, если вы делаете то, что говорит Сэм, тогда вы можете редактировать simple_spinner_dropdown_item.xml ... – whyoz

9

Чтобы расширить Сэма решение, вам нужно будет модифицировать файл очень специфически, чтобы переопределить стили Android.

После копирования simple_spinner_dropdown_item.xml из папки SDk в правильную папку раскладки вы работаете, вы увидите этот код:

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/text1" 
style="?android:attr/spinnerDropDownItemStyle" 
android:singleLine="true" 
android:layout_width="match_parent" 
android:layout_height="?android:attr/dropdownListPreferredItemHeight" 
android:ellipsize="marquee" /> 

Для изменения фона в TextView и избежать этой ошибки:

.../res/layout/simple_spinner_dropdown_item.xml:20: error: Error: Attribute is not public. (at 'layout_height' with value '?android:attr/dropdownListPreferredItemHeight').

ваш код должен будет выглядеть следующим образом:

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/spinnerText" 
style="@style/SpinnerTextViewItem" 
android:singleLine="true" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:ellipsize="marquee" /> 

Другое главное изменение, которое нужно сделать, - создать свой собственный стиль. Вы, наверное, есть файл styles.xml, поэтому добавить новый стиль, похожий на этот:

<style name="SpinnerTextViewItem" parent="@android:style/Widget.TextView" > 
    <item name="android:textStyle">normal</item> 
    <item name="android:background">@color/green</item> 
</style> 

Если у вас есть что-то в вашем файле colors.xml, вы можете установить цвет с помощью «@ цвет/зеленый» или что-то цвет, который вы выбираете (конечно, вы можете использовать @android: color/...), не говоря уже обо всех других элементах, которые вы можете добавить, чтобы изменить TextView.

Смежные вопросы