Пример использования:
Спиннер темный, но я хочу, чтобы выпадающий список был светлым.
Android M
Новое в Android 6.0, теперь у Spinner есть параметр android:popupTheme
, который позволяет вам установить тему, используемую для всплывающего окна (dropdown).
Вы можете использовать его так:
<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 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();
}
}
Просто для справки, если вы используете CursorAdapter
, ваша реализация может быть намного проще, просто переопределите newView()
, нет необходимости переопределять getDropDownView()
там:
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return mDropDownHelper.getDropDownViewInflater().inflate(R.layout.list_item, parent, false);
}
вы можете попробовать следующее: в вашей папке макета сделайте spinner_item.xml:
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right"
android:padding="10dp"
android:background = "#ffffff"
android:textColor="@color/primary_text"
android:textSize="@dimen/text_size_normal" />
то используйте этот код:
spinnerAdapter = new ArrayAdapter<String>(R.layout.spinner_item,items);