Пример использования:Как установить другую тему для выпадающего списка Spinner?
Вертушка темна тематикой, но я хочу выпадающий быть легкой тематикой.
Пример использования:Как установить другую тему для выпадающего списка Spinner?
Вертушка темна тематикой, но я хочу выпадающий быть легкой тематикой.
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();
}
}
вы можете попробовать это: в вашей папке макета сделать 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);
Итак, если вы положили -1 на это, почему бы вам не объяснить, почему? – Bostone
Я думаю, потому что это довольно очевидно, что он не отвечает на вопрос. Вопрос заключается в настройке темы, я не вижу ссылки на тематику в этом ответе. Просто так мы поняли, что я не сделал этого, другие уже на это уже успели. – 2Dee
Только для справки, если вы используете CursorAdapter
ваш imp lementation может быть гораздо проще, просто переопределить newView()
, нет необходимости переопределять getDropDownView()
есть:
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return mDropDownHelper.getDropDownViewInflater().inflate(R.layout.list_item, parent, false);
}
Отлично! Спасибо, chris –
Привет, я не смог найти ThemedSpinnerAdapter внутри appcompat-v7. Я использую версию 22.2.1. Нужно ли мне что-то менять, чтобы импортировать его? –
@DouglasAlves используют новейшие 23.0.0 – khusrav