Layout spinner android studio

Spinner

Общая информация

Компонент Spinner из раздела Containers (раньше был в разделе Widgets) похож на выпадающий список (ComboBox), используемый в OC Windows (не путать с игрушкой Fidget Spinner). В закрытом состоянии компонент показывает одну строчку, при раскрытии выводит список в виде диалогового окна с переключателями.

Сначала покажу быстрый способ использования элемента. При добавлении элемента на экран отображается просто полоска со строкой Item1. В основном настройка происходит программным путём. Но можно и через XML. Добавим в строковый файл ресурсов strings.xml несколько элементов массива:

Теперь осталось в атрибуте android:entries указать на созданный массив и компонент Spinner будет заполнен данными. Запустите проект и проверьте.

Цвет компонента можно задать в атрибуте android:background=»@color/colorAccent».

Внешний вид компонента в разных версиях Android менялся.

Если нужно из программы узнать, какой пункт из выпадающего списка выбран в Spinner, то можно использовать такой код, например, при нажатии кнопки:

Если нужен не текст, а номер позиции, то вызывайте метод getSelectedItemPosition()

Если вам нужно получить выбранный элемент сразу в момент выбора, то используйте метод setOnItemSelectedListener(), который описан ниже.

Используем адаптер

Как и в случае с компонентом ListView, Spinner использует адаптер данных для связывания содержимого из набора данных с каждым пунктом в списке. Для загрузки данных нужно:

  • Получить экземпляр компонента Spinner
  • Настроить адаптер данных для связывания
  • Вызвать метод setAdapter()

В закрытом состоянии

В раскрытом состоянии

Данные в закрытом и раскрытом состоянии Spinner отображает по разному. Поэтому необходимо создавать макеты шаблонов для обоих состояний. Android предоставляет несколько своих собственных ресурсов для Spinner для простых задач. Например, есть ресурс android.R.layout.simple_spinner_item для создания представления для каждого элемента списка. Ресурс android.R.layout.simple_spinner_dropdown_item служит шаблоном для раскрывающего списка.

Создадим строковый массив в файле strings.xml:

Загрузим строковый массив с именем animals в экземпляр класса ArrayAdapter при помощи метода createFromResource():

Запустив программу, вы увидите работающий пример, как на картинках, представленных выше.

По умолчанию выводится первый элемент списка. С помощью метода setSelection() можно установить нужный элемент по умолчанию, указав индекс из строкового ресурса.

За честные выборы! — что выбрал пользователь

Нам интересно узнать, что именно выбрал пользователь из списка и обработать эту информацию.

Читайте также:  Андроид местоположение по смс

Нам нужно получить выбранный пользователем пункт в компоненте Spinner при помощи метода setOnItemSelectedListener() и реализовать метод onItemSelected() класса AdapterView.OnItemSelectedListener:

Теперь при выборе любого пункта вы получите всплывающее сообщение о выбранном пункте. Обратите внимание, что нам также пришлось реализовать вызов обратного вызова onNothingSelected().

В начале статьи показывался более простой способ с использованием метода getSelectedItem(), который достаточен для большинства случаев.

Предупредить компонент об изменении пунктов

Если в приложении вы изменили состав выпадающего списка, то необходимо сообщить компоненту Spinner, чтобы он показывал обновлённый список. Сделать это можно при помощи метода адаптера notifyDataSetChanged().

Найти позицию по слову

Если мы хотим узнать, в какой позиции находится то или иное слово, то нужно получить адаптер через метод getAdapter(), а затем уже и позицию.

Тонкая настройка — своя разметка для Spinner

Вы можете установить собственный фон, но не можете установить, к примеру, цвет и размер текста в настройках свойств. В предыдущих примерах мы видели, что при подключении к адаптеру используются системные разметки android.R.layout.simple_spinner_item и android.R.layout.simple_spinner_dropdown_item. Ничто не мешает вам посмотреть исходники данных файлов и создать файлы для собственной разметки, которые потом можно подключить к адаптеру.

Давайте создадим собственную разметку с значками. В папке res/layout создаём файл row.xml:

Осталось в коде заменить две строки на одну:

В примере использовался один общий файл, но можете создать два отдельных шаблона для закрытого и раскрытого вида элемента. Например, так (простейший вариант):

spinner.xml

spinner_dropdown_item.xml

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

Программная настройка цвета и размера текста для первой строчки

В сети нашёл пример программной установки цвета и размера текста для первой строчки элемента в закрытом состоянии. Может кому пригодится.

Не выбирать элемент при запуске

Иногда хочется, что при запуске не выбирался первый элемент списка, как это происходит по умолчанию. Решение в лоб — добавить первым элементом пустую строку или текст «Выберите. » не слишком красив, так как при раскрытии списка мы увидим эти элементы, которые только портят картину. В сети нашёл вариант, использующий собственный адаптер.

CustomAdapter.java

Попробуйте этот вариант, может он подойдёт вам.

Режим android:spinnerMode=»dialog»

У компонента есть атрибут android:spinnerMode, у которого можно установить значение dialog. В этом случае при раскрытии списка задняя активность затемняется. Это хорошо заметно на белом фоне. Проверьте самостоятельно.

В этом режиме диалога для компонента Spinner можно вывести заголовок с помощью методов setPrompt() или setPromptId(). Заголовок выводится при раскрытии списка.

Источник

Android spinner custom layout

I am trying to customize my spinner with custom style.

Читайте также:  Открытые проекты для android

Spinner

Here is my styles.xml file.

styles.xml

This gives me spinners that look like this:

I want to add a dropdown arrow. When I change the spinner to code for dropdown arrow, all the textcolor and background color are lost.

Spinner code to show dropdown arrow

How can I retain my theme along with the drop down arrow ??

P.S. I am not very good at capturing screenshots on linux machines.

1 Answer 1

It’s normal behaviour of Android:

Spinner have it’s own default background, when you use styles.xml to custom it, it follow and turn to blue. Then in the code you again set the android:background of your Spinner to @android:drawable/btn_dropdown , so it override your styles because properties in layout xml have higher priority than in styles.

You don’t have background to show dropdown arrow, use this:

First solution:

and in your java file

Second solution

You will need a RelativeLayout wrap outside Spinner. Replace your with this:

Then create a custom background and choose background color for your spinner:

Источник

Spinner Android Studio

Выпадающие списки создаются программистами для предоставления пользователю возможности выбора одного пункта или нескольких. При создании приложений для ОС Андроид применяется Spinner Android Studio.

Платформа для разработки приложений для ОС Андроид позволяет создавать списки подобно другим IDE. О том, что такое Android Studio, подробности реализации возможностей Спиннер можно узнать из краткого обзора процедуры.

Описание Spinner Android Studio

В Android Studio выпадающий список, доступный в разделе «Виджеты», напоминает стандартные перечни, применяемые в операционных системах.

Будучи закрытым, он демонстрирует единственную (первую по умолчанию) строку, а в момент активации его пользователем выводится весь перечень элементов, из которых юзер может выбирать.

Рекомендуется начать с простых способов применения Spinner. Если добавить элемент на дисплей, то отобразится полоса со строчкой Item1. Изменения производятся при помощи правки кода, но допустимо использование XML. Примеры Spinner Android Studio:

добавление в строковый файл ресурсов (strings.xml) фрагментов матрицы:

Правим атрибут Android: entries – следует сослаться на матрицу, и Spinner заполнится информацией. Теперь можно активировать проект и понаблюдать за результатом.

Если требуется из самого приложения узнать информацию о том, какой пункт выбрали в Спиннере, лучше применить следующий код, отвечающий на активацию кнопки:

Если требуется не сам текст, а сведения о номере строчки, то проще применить getSelectedItemPosition()

При необходимости получения выбранного пункта в момент активации, рекомендуется функция «setOnItemSelectedListener()».

Как применить адаптер

Spinner использует адаптеры информации для обмена данными из массива со строчками исходного списка. Чтобы выгрузить сведения требуется:

извлечь экземпляр Spinner;

провести настройку адаптера для обеспечения связи;

Как выглядит в закрытом виде

Пример списка можно наблюдать на рисунке до его открытия.

Демонстрация в раскрытом виде

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

Читайте также:  Android studio не видит openfileinput

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

«Андроид» предоставляет свои возможности для Spinner, которые могут применяться программистами. Практика: в наличии ресурс android.R.layout.simple_spinner_item для формирования представления каждой строчки нашего списка. Тогда ресурс android.R.layout.simple_spinner_dropdown_item будет служить образцом для раскрывающегося списка. В Android Studio spinner заполнить созданную строковую матрицу можно с помощью кода.

Пример загрузки строковой матрицы с наименованием «animals» в исходный экземпляр «ArrayAdapter», применение createFromResource():

Если не проводилось изменений в коде, то будет выведен 1-й элемент нашего списка. А при использовании «setSelection()» программист сможет поставить требуемый элемент (default) если укажет значение индекса ресурса в скобках.

Извлечение информации: как определить пункт, выбранный пользователем

Как понять, какой пункт активировал пользователь, как использовать эти данные? Требуется получить информацию о том, какую строчку выбрал человек, для этого применяется «setOnItemSelectedListener()» и «onItemSelected()» класса AdapterView.OnItemSelectedListener:

//Получаем экземпляр элемента Spinner

Предупреждение компонента об изменении данных

Если разработчик произведёт изменения состава исходного списка, требуется передать обновлённую информацию Spinner. Специально для этого существует методика адаптера notifyDataSetChanged().

Как отыскать координаты по словам

При необходимости узнать, где расположены слова, требуется получить адаптер с применением методики getAdapter().

Точная настройка списков

Android Studio разрешает изменять фоновое изображение, однако нельзя устанавливать цвета или размеры букв текстовой информации списков.

android.R.layout.simple_spinner_item и android.R.layout.simple_spinner_dropdown_item.

Пример создания своей разметки с пиктограммами. В каталоге «res/layout» следует создать файл с названием «row.xml».

Теперь в листинге требуется поменять пару строчек на одну.

В рассматриваемом проекте применяется единственный главный файл. При этом допускается создание двух шаблонов для разных типов (закрытых или раскрытых). Пример использования.

Spinner_dropdown_item.xml

Как использовать возможность установки собственной пиктограммы для отдельных пунктов. Нужно объявить новый класс, который будет базироваться на ArrayAdapter, после чего задача становится легко реализуемой. Результат: возле строчек с двумя днями недели появятся символы кошачьей лапы.

Как изменить цвета и размеры шрифта 1-й строки

Демонстрация программного изменения установок цветовой гаммы. И размеров шрифтов для 1-й строки пункта в закрытом виде.

Запрет выбора строки во время запуска

Пример: требуется, чтобы во время запуска не показывался первый пункт исходного списка (default). Самым удачным решением этой проблемы будет добавление 1-м элементом пустой строчки либо текста «Выберите. ». Применяют и другой вариант.

CustomAdapter.java

SetPrompt() не нужен

В старых версиях ОС «Андроид» для компонентов Spinner допускалось выведение заголовков с использованием «setPrompt()» , а также «setPromptId()». Мало кто это использует, хотя для совместимости применение методики допустимо.

У этого компонента можно определить опцию android:spinnerMode. Если поставить настройку «dialog», то при активации списка пользователь увидит затемнение основного фона дисплея.

В Android Studio выпадающий список часто используется в приложениях. Применение Spinner не считается проблемной задачей и легко реализуется в программировании приведёнными способами.

Источник

Оцените статью