Как изменить стиль текста блесны? - PullRequest
14 голосов
/ 08 июля 2010

Я создаю спиннер в моих файлах XML макета и задаю строковый массив для этого блесна. Если я изменяю текстовый стиль счетчика, изменения не повлияют на текст.

Я прочитал в googlegroups, что у счетчика нет текста, и поэтому текстовый стиль не может быть изменен, и мне нужно изменить стиль текстового представления, которое отображается в счетчике. Но как я могу это сделать. Желательно в моем XML-файле.

Ответы [ 6 ]

24 голосов
/ 19 октября 2011

Как указывал мой предшественник, вы не можете сделать это в основном файле макета XML, где находится компонент Spinner.

И ответ выше хорош, но если мы хотим использовать лучшие практики Google, как вы знаете ... использовать стили для всего ... вы можете сделать это в 3 "простых" шага, как указано ниже:

Шаг 1: Вам нужен дополнительный файл в папке макета для поиска элементов Spinner:

<?xml version="1.0" encoding="utf-8"?>
<TextView  
    android:id="@+id/textViewSpinnerItem" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    style="@style/SpinnerTextViewItem"
    xmlns:android="http://schemas.android.com/apk/res/android" />

Назовите этот файл: spinner_item_text.xml

Шаг 2: Затем в вашем классе деятельности, когда вы заполняете Spinner массивом предметов:

adapter = new ArrayAdapter<CharSequence>(this, R.layout.spinner_item_text, items);
spinner.setAdapter(adapter);

Обратите внимание, что ресурс R.layout.spinner_item_text находится в вашем собственном файле R.

Шаг 3: В папке «Значения» создайте или используйте (возможно, у вас он уже есть) файл styles.xml. Требуемая запись стиля должна выглядеть следующим образом:

<style name="SpinnerTextViewItem" parent="@android:style/Widget.TextView" >
    <item name="android:textSize" >8dp</item>
    <item name="android:textStyle" >bold</item>
</style>

И это все!

До сих пор было очень удобно размещать все о размерах, стилях, цветах и ​​т. Д. Текста в файле styles.xml, чтобы его было легко поддерживать.

18 голосов
/ 17 января 2014

Только через XML

В качестве продолжения превосходного ответа @Cyril REAL, здесь подробно описывается, как стилизовать ваши Spinners просто с помощью XML, если вы заполняете свойSpinner via android:entries.

Приведенные выше ответы сработают, если вы создаете Spinner с помощью кода, но если вы настраиваете записи Spinner с помощью XML, то есть с помощью android:entries, тогда вы можете настроить размер текстаи другие атрибуты со следующими двумя настройками темы:

В вашем res / values ​​/ styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="AppBaseTheme" parent="android:Theme.Holo">
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">

        <!-- For the resting Spinner style -->
        <item name="android:spinnerItemStyle">
            @style/spinnerItemStyle
        </item> 

        <!-- For each individual Spinner list item once clicked on -->
        <item name="android:spinnerDropDownItemStyle">
            @style/spinnerDropDownItemStyle
        </item>

    </style>

    <style name="spinnerItemStyle">
        <item name="android:padding">10dp</item>
        <item name="android:textSize">20sp</item>
        <item name="android:textColor">#FFFFFF</item>
    </style>

    <style name="spinnerDropDownItemStyle">
        <item name="android:padding">20dp</item>
        <item name="android:textSize">30sp</item>
        <item name="android:textColor">#FFFFFF</item>
    </style>

</resources>
18 голосов
/ 08 июля 2010

Когда вы создаете Адаптер, который поддерживает Spinner, вы можете установить макет для элемента Spinner.

spinner.setAdapter(new ArrayAdapter(this, R.id.some_text_view));

Вы можете стилизовать some_text_view так, как вам хочется.

<TextView android:id="@+id/some_text_view" android:textStyle="bold" />
9 голосов
/ 15 января 2012

На самом деле вы можете настроить текст блесны с помощью xml.

В своем собственном стиле определите:

<item name="android:spinnerItemStyle">@style/yourStyleForSpinnerItem</item>

и определите этот стиль также:

<style name="yourStyleForSpinnerItem">

//stuff you want for the item style

</style>

Когда вы создаете экземпляр адаптера счетчика в коде Java, вы можете использовать android.R.layout.simple_spinner_item по умолчанию

2 голосов
/ 21 февраля 2014

Если вы не хотите таких обходных путей, есть простой способ.Получить текстовое представление от счетчика и изменить его параметры:

TextView tv = (TextView) spin.getSelectedView();
tv.setTypeface(Typeface.DEFAULT_BOLD); //to make text bold
tv.setTypeface(Typeface.DEFAULT); //to make text normal
0 голосов
/ 23 января 2018

, если вы хотите просто изменить фон всплывающего окна в Spinner, вызовите этот метод:

spinner.setPopupBackgroundResource(R.color.pa_md_white);
...