Android: Где скрывается атрибут цвета текста виджета Spinner?
Я пытаюсь изменить цвет текста для отдельного элемента, который отображается в кнопке spinner после выбора элемента из раскрывающегося списка. Я просматривал темы .xml и styles.xml в Android SDK в течение часа, и я не могу найти, откуда Spinner получает значение цвета.
Чтобы прояснить, я НЕ пытаюсь изменить цвет выпадающего элемента, я пытаюсь изменить цвет отображаемого текста, если нет выпадающего списка. Думаю, вы могли бы назвать это текстом spinner 'button'.
Ответы
Ответ 1
Я думаю, что это, вероятно, этот бит в styles.xml
<style name="Widget.TextView.SpinnerItem">
<item name="android:textAppearance">@style/TextAppearance.Widget.TextView.SpinnerItem</item>
</style>
<style name="Widget.DropDownItem.Spinner">
<item name="android:checkMark">?android:attr/listChoiceIndicatorSingle</item>
</style>
- = EDIT = -
Вот результат:
![enter image description here]()
и вот как это делается:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MooTheme" parent="android:Theme">
<item name="android:spinnerItemStyle">@style/MooSpinnerItem</item>
</style>
<style name="MooSpinnerItem" parent="android:Widget.TextView.SpinnerItem">
<item name="android:textAppearance">@style/MooTextAppearanceSpinnerItem</item>
</style>
<style name="MooTextAppearanceSpinnerItem" parent="android:TextAppearance.Widget.TextView.SpinnerItem">
<item name="android:textColor">#F00</item>
</style>
</resources>
Затем просто добавьте это в тег приложения в AndroidManifest.xml
android:theme="@style/MooTheme"
Ответ 2
Да, CaseyB правильно.
Здесь, как я устанавливаю цвет текста прядильщика, немного простой пример:
styles.xml
<style name="Theme.NoTitleBar.WithColoredSpinners" parent="@android:style/Theme.NoTitleBar">
<item name="android:spinnerItemStyle">@style/SpinnerItem</item>
<item name="android:spinnerDropDownItemStyle">@style/SpinnerItem.DropDownItem</item>
</style>
<style name="SpinnerItem" parent="@android:style/Widget.TextView.SpinnerItem">
<item name="android:textColor">#00FF00</item>
</style>
<style name="SpinnerItem.DropDownItem" parent="@android:style/Widget.DropDownItem.Spinner">
<item name="android:textColor">#FF0000</item>
</style>
</resources>
Затем в вашем манифесте:
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.NoTitleBar.WithColoredSpinners" >
Текст снаружи всех ваших прядильщиков теперь будет зеленым, а текст в выпадающих меню будет красным.
Ответ 3
Я сделал это, используя другую простую технику,
скопируйте файл simple_spinner_item.xml и simple_spinner_dropdown_item.xml из папки res/layout Android и скопируйте их в свой проект.
Затем измените следующие строки
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.planets_array, Android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
spinnerSubject.setAdapter(adapter);
как:
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.planets_array, R.layout.simple_spinner_item);
adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);
spinnerSubject.setAdapter(adapter);
Остальное легко, теперь вы можете отредактировать файл simple_spinner_item.xml, чтобы изменить видимость одного видимого элемента виджета spinner и отредактировать файл simple_spinner_dropdown_item.xml, чтобы изменить внешний вид выпадающего списка.
Например,
мой макет деятельности содержит:
<Spinner
android:id="@+id/mo_spinnerSubject"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:background="@drawable/spinnerset_background" />
и мой simple_spinner_item.xml теперь содержит:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:textColor="@color/custom_white"
android:textSize="16sp" />
а simple_spinner_dropdown_item.xml выглядит так:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:background="@color/custom_black"
android:ellipsize="marquee"
android:singleLine="true"
android:textColor="@color/custom_white" />
Ответ 4
Вы можете использовать setOnItemSelectedListener на объекте Spinner,
spinnerObject.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
((TextView)parentView.getChildAt(0)).setTextColor(Color.rgb(249, 249, 249));
// OR ((TextView)parentView.getChildAt(0)).setTextColor(Color.RED);
}
});
Ответ 5
его очень просто. Я искал всего, вам просто нужно создать стиль и установить на spinner
сначала создайте свою тему в Style.xml
<style name="spinnerTheme" parent="android:Theme">
<item name="android:textColor">@color/gray_dark</item>
</style>
то в вашем xml, где вы установили свой счетчик, добавьте это:
Android: тема = "@стиль/spinnerTheme"
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="50dp"
android:padding="10dp"
android:paddingBottom="5dp"
android:paddingLeft="10dp"
android:layout_span="3"
android:layout_weight="1.3"
android:theme="@style/spinnerTheme"
android:textSize="12sp"
android:spinnerMode="dialog"
android:clickable="false"/>
Наслаждайтесь кодированием
Ответ 6
Я не думаю, что есть цвет, связанный с текстом. Скорее всего, это предопределено в коде Android, возможно, придется просто сделать свой собственный, если вы хотите изменить цвет прядильщика.
Это будет включать изменение метода ondraw(), и вы нарисуете счетчик, как бы вы хотели, чтобы он выглядел.
Единственное, что, я думаю, может потенциально решить, эта проблема - свойство стиля spinner.
Источник: http://developer.android.com/reference/android/widget/Spinner.html
Это может помочь:
http://www.designerandroid.com/?p=28
Ответ 7
это сработало для меня
создайте свой собственный файл макета с пользовательским определением для элемента spinner.
custom_spinner.xml:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/txt_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16sp"
android:textColor="#ffffff" />
Измените элемент счетчика с помощью адаптера
Spinner spinner= (Spinner) findViewById(R.id.spinner1);
ArrayAdapter adapter = ArrayAdapter.createFromResource(this,R.array.by_loc_array,R.layout.txt_spinner);
spinner.setAdapter(adapter);
Ответ 8
Можно изменить цвет текста, переопределив метод getView следующим образом:
new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_dropdown_item, list()){
@Override
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
View view = super.getView(position, convertView, parent);
//change the color to which ever you want
((CheckedTextView) view).setTextColor(Color.RED);
return view;
}