Как изменить в Spinner цвет текста, фона. И форму опускающего списка в Android

введите сюда описание изображенияЯ читал на разных сайтах. Но так-как там реализовано у меня не получается. Ответ на вопрос может быть большим . Но если вы ответите подробно. Я буду вам ОЧЕНЬ Благодарен. Спасибо вам за то что помогаете новичкам разработчикам


Ответы (2 шт):

Автор решения: Circassian
Spinner spinner = findViewById(R.id.spinner);

List<String> list = new ArrayList<String>(){{
    add("Пункт 1");
    add("Пункт 2");
    add("Пункт 3");
    add("Пункт 4");
    add("Пункт 5");
}};
CustomAdapter adapter = new  CustomAdapter(this, R.layout.item_spinner_title, R.layout.item_spinner_dropdown, list);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        Log.d("logs", "Выбран пункт " + list.get(position));
    }
    public void onNothingSelected(AdapterView<?> arg0) {}
});

Вот адаптер для спинера. Можешь передать в него свои вьюхи

public class CustomAdapter extends ArrayAdapter<String> {

    private Context context;
    private int mResource; // id вьюхи для свернутого списка
    private int dropDownResource; // id вьюхи для выпадающего списка
    private List<String> items;

    public CustomAdapter(@NonNull Context context, int mResource, int dropDownResource, List<String> items) {
        super(context, mResource, items);
        this.context = context;
        this.mResource = mResource;
        this.dropDownResource = dropDownResource;
        this.items = items;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = LayoutInflater.from(context).inflate(mResource, parent, false);
        TextView tvTitle = view.findViewById(R.id.tvTitle);
        tvTitle.setText(items.get(position));
        //Здесь делаешь с tvTitle то что тебе нужно. Меняешь фон, цвет текста и т.д.
        return view;
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        View view = LayoutInflater.from(context).inflate(dropDownResource, parent, false);
        TextView tvTitle = view.findViewById(R.id.tvTitle);
        tvTitle.setText(items.get(position));
        //Здесь делаешь с tvTitle то что тебе нужно. Меняешь фон, цвет текста и т.д.
        return view;
    }
}

item_spinner_title

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tvTitle"
    style="?android:attr/dropDownItemStyle"
    android:singleLine="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="18sp"
    android:padding="16dp"
    android:textColor="@color/white"
    android:ellipsize="marquee" />

item_spinner_dropdown

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tvTitle"
    style="?android:attr/dropDownItemStyle"
    android:singleLine="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="14sp"
    android:padding="16dp"
    android:textColor="@color/black"
    android:ellipsize="marquee" />

→ Ссылка
Автор решения: Maks

Если ты новичок то возможно тебе будет проще взять готовую библиотеку и вперёд. Не надо придумывать то что уже есть. Например эта библиотека:

https://github.com/skydoves/PowerSpinner/blob/master/README.md

→ Ссылка