источник
источник
Android M
Новое в Android 6.0, Spinner теперь имеет android:popupTheme
параметр, который позволяет вам установить тему, используемую для всплывающего окна (раскрывающегося списка).
Вы можете использовать это так:
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:popupTheme="@android:style/ThemeOverlay.Material.Light" />
Это будет работать на устройствах с API уровня 23+, но не на устройствах с более ранней версией Android.
AppCompat
Здесь на помощь приходит AppCompat. Его реализация Spinner также поддерживает popupTheme
, но для правильной работы требуется немного больше усилий.
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
После этого вам необходимо обновить адаптер, чтобы иметь возможность работать с AppCompat. Вы делаете это, заставляя его реализовать новый ThemedSpinnerAdapter
интерфейс.
public class MyAdapter extends BaseAdapter implements ThemedSpinnerAdapter {
Theme getDropDownViewTheme() { ... }
void setDropDownViewTheme(Theme theme) { ... }
}
Эти методы используются Spinner, чтобы иметь возможность сообщить адаптеру, какую тему использовать для расширения любых раскрывающихся представлений. Чтобы сделать это как можно проще, мы предоставили вам Helper
класс, который вы можете подключить к своему адаптеру.
Это означает, что ваш адаптер становится примерно таким:
public class MyAdapter extends BaseAdapter implements ThemedSpinnerAdapter {
private final ThemedSpinnerAdapter.Helper mDropDownHelper;
public MyAdapter(Context context) {
mDropDownHelper = new ThemedSpinnerAdapter.Helper(context);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
View view;
if (convertView == null) {
// Inflate the drop down using the helper's LayoutInflater
LayoutInflater inflater = mDropDownHelper.getDropDownViewInflater();
view = inflater.inflate(R.layout.my_dropdown, parent, false);
}
// ...
return view;
}
@Override
public void setDropDownViewTheme(Theme theme) {
mDropDownHelper.setDropDownViewTheme(theme);
}
@Override
public Theme getDropDownViewTheme() {
return mDropDownHelper.getDropDownViewTheme();
}
}
для стрелки прядильщика, которую я использовал,
android:backgroundTint="@color/white"
это будет работать с API 21для просмотра счетчика и раскрывающегося списка:
для getView () адаптер будет использовать spinner_item.xml
для getDropDownView () адаптер будет использовать dropdwon_item.xml
тогда вы можете использовать свои собственные макеты по своему усмотрению
Надеюсь, поможет
источник
Просто для справки, если вы используете
CursorAdapter
вашу реализацию, может быть намного проще, просто переопределитеnewView()
, не нужно переопределятьgetDropDownView()
там:источник
вы можете попробовать это: в папке макета создайте spinner_item.xml:
затем используйте этот код:
источник