Верхняя / нижняя прокладка для Spinner

Как указать для счетчика в Android дополнительное дополнение в верхней / нижней части первого / последнего элемента? См. Пример Goolge ниже (интервал 8 dp). Простое меню Google

Solutions Collecting From Web of "Верхняя / нижняя прокладка для Spinner"

Spinner не поддерживает несколько типов просмотров. Проблема .

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

отредактированный

В соответствии с вашим комментарием разрешена ваша проблема с этим вопросом

Вам нужно создать пользовательский адаптер для Spinner используя свой собственный макет. Таким образом, вам просто нужно предоставить макет с соответствующими полями / paddins.

 Spinner spinner = (Spinner) findViewById(R.id.myspinner); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.data, R.layout.spinner_item); adapter.setDropDownViewResource(R.layout.spinner_dropdown_item); spinner.setAdapter(adapter); 

Здесь вы можете найти действительный пример.

Просто создайте отдельный макет для элементов, которые вы хотите отобразить на счетчике.

Что-то вроде этого

spinner_text_view.xml

 <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/customTextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="15dp" android:text="@string/sample_list_item" android:textColor="@android:color/black" android:textSize="20sp" /> 

Затем в вашей активности / фрагменте вы можете создать адаптер (в этом случае адаптер массива будет простым) и передать этот макет в эту ссылку на адаптер. Наконец, установите этот адаптер на счетчик, и вы получите желаемый результат.

Образец кода.

 private void setupSpinner() { String[] sampleSpinnerItems = {"One", "Two", "Three", "Four", "Five"}; ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this, R.layout.spinner_text_view, sampleSpinnerItems); sampleSpinner.setAdapter(spinnerAdapter); } 

Надеюсь это поможет.

Примечание: spinner_text_view – это файл макета, который вы создали ранее.

Для этого и пользовательских макетов вам нужен специальный адаптер. Вы можете использовать 2 макета. Предположим, что у вас есть n элементов для отображения, в вашем счетчике у вас будет n + 2. IF позиция равна 0 (первый элемент) или последний элемент, который вы покажете пустой макет, иначе вы покажете другой макет. Пустой макет, который вы будете использовать для создания этого пространства

Вы можете выполнить это, используя пользовательский Adapter для Spinner . Это будет выглядеть так:

 class YourAdapter extends BaseArrayAdapter<YourObject> { @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = inflater.inflate(R.layout.your_item, parent, false); DropDownViewHolder holder = new DropDownViewHolder(); holder.root = convertView.findViewById(R.id.drop_down_root); // other assignments etc. convertView.setTag(holder); } DropDownViewHolder holder = (DropDownViewHolder) convertView.getTag(); int bottomPadding = 0; int topPadding = 0; if (position == 0) { topPadding = getContext().getResources().getDimensionPixelSize(R.dimen.margin_8); } else if (position == (getCount() - 1)) { bottomPadding = getContext().getResources().getDimensionPixelSize(R.dimen.margin_8); } holder.root.setPadding(0, topPadding, 0, bottomPadding); // other UI related logic etc. return convertView; } // ... public static class DropDownViewHolder { View root; // other views } } 

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