Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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 или раздувания другого макета в зависимости от положения, но решение с дополнением кажется мне более естественным.