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