Стиль панели инструментов Android Spinner

Как мне добиться дизайна материала прядильщика в наборе инструментов? Я попробовал следующее, но мой счетчик выглядит так

enter image description here

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="56dp"
    android:background="@color/main_color"
    app:contentInsetLeft="14dp"
    app:contentInsetRight="14dp"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    app:theme="@style/ThemeOverlay.AppCompat.ActionBar">

    <Spinner
        android:id="@+id/spinner_nav"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</android.support.v7.widget.Toolbar>

Мой минимальный SDK 15.

на моем

ButterKnife.inject(this);

    mToolbar.inflateMenu(R.menu.menu_login);
    mToolbar.setTitle(R.string.sign_in);
    mToolbar.setOnMenuItemClickListener(this);

    SpinnerAdapter spinnerAdapter = ArrayAdapter.createFromResource(this,
            R.array.options, android.R.layout.simple_spinner_dropdown_item);

    mSpinner.setAdapter(spinnerAdapter);
    mSpinner.setOnItemSelectedListener(this);

Меню - это временный лист бумаги, который всегда перекрывает панель приложений, а не ведет себя как расширение панели приложений.

любые ссылки будут очень полезны

ОБНОВИТЬ

Мне удалось добиться того, чего я хочу

enter image description here

Я использовал это

 ButterKnife.inject(this);

        mToolbar.setTitle(R.string.sign_in);
        setSupportActionBar(mToolbar);

        SpinnerAdapter spinnerAdapter = ArrayAdapter.createFromResource(getSupportActionBar().getThemedContext(),
                R.array.options, android.R.layout.simple_spinner_dropdown_item);

        getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
        getSupportActionBar().setListNavigationCallbacks(spinnerAdapter, this);

и мой XML

  <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:background="@color/app_secondary_color"
        app:contentInsetLeft="14dp"
        app:contentInsetRight="14dp"
        app:popupTheme="@style/ThemeOverlay.AppCompat"
        app:theme="@style/ThemeOverlay.AppCompat.ActionBar">

    </android.support.v7.widget.Toolbar>

Но как мне сделать его белым, а цвет текста меню - синим? Также у меня есть эта проблема. кажется, это слишком далеко? Любой способ исправить эту выпадающую стрелку?

enter image description here

Обновление 2

Хорошо потратив столько времени на попытки, я достиг того, как сделать его белым, а цвет текста - черным. Я создал свой собственный макет для стиля выпадающего

<?xml version="1.0" encoding="utf-8"?>

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    style="?android:attr/spinnerDropDownItemStyle"
    android:singleLine="true"
    android:layout_width="match_parent"
    android:background="@color/background_material_light"
    android:textColor="@color/abc_primary_text_material_light"
    android:layout_height="48dp"
    android:ellipsize="marquee"/>

затем добавил этот код на моем сайте

 spinnerAdapter.setDropDownViewResource(R.layout.custom_simple_spinner_dropdown_item);

Единственная проблема, с которой я сейчас сталкиваюсь, заключается в том, что состояние печати не работает, это просто плоскость белого цвета. если вы видите в другом всплывающем меню, когда вы нажимаете на элемент, цвет фона становится немного темнее. Также этот раздражающий значок все еще слишком далеко от текста.

Ответ 1

Вы должны сделать цветной список состояний цвета и применить его как фон для CheckedTextView. Что касается стрелки, которая находится слишком далеко, AFAIK из-за длины детей, она доходит до самого длинного ребенка. Таким образом, нет возможности настроить это.

Ответ 2

попробуйте этот код для изменения цвета шрифта первого элемента или цвета фона для Spinner

Spinner spinner = findViewById(R.id.spn);
        ArrayList<String> lst = new ArrayList<>();
        lst.add("Android");
        lst.add("Iphone");
        lst.add("Windows");

        ArrayAdapter<String> adapter = new ArrayAdapter<String >(getApplicationContext(),R.layout.spin_item,lst)
        {
            public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent)
            {
                View v = null;

                if (position == 0) {
                    TextView tv = new TextView(getContext());
                    tv.setTextColor(Color.parseColor("#007f00"));
                    v = tv;
                }
                else {

                    v = super.getDropDownView(position, null, parent);
                }
                return v;
            }
        };
        spinner.setAdapter(adapter);

Ответ 3

Если вы хотите, чтобы состояние нажатия работало, вы должны добавить селектор Drawable вместо цвета в качестве фона. Пример селектора:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/numpad_button_bg_selected" android:state_selected="true"></item>
    <item android:drawable="@drawable/numpad_button_bg_pressed" android:state_pressed="true"></item>
    <item android:drawable="@drawable/numpad_button_bg_normal"></item>

</selector>