Ответ 1
Spinner не поддерживает несколько типов просмотров. Issue.
Я предложил вам использовать диалог для отображения вашего списка.
Edited
в соответствии с вашим комментарием разрешена ваша проблема с этим вопросом
Как указать для счетчика в Android дополнительное дополнение в верхней/нижней части первого/последнего элемента? См. Образец Goolge ниже (интервал 8 dp).
Spinner не поддерживает несколько типов просмотров. Issue.
Я предложил вам использовать диалог для отображения вашего списка.
Edited
в соответствии с вашим комментарием разрешена ваша проблема с этим вопросом
Вам необходимо создать для вас пользовательский адаптер 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 элементов для показа, в вашем spinner вы будете иметь 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
или раздувания другого макета в зависимости от положения, но решение с дополнением кажется мне более естественным.