Відповіді:
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
для подання спинера та спаду:
ArrayAdapter<Area> areasAdapter = new ArrayAdapter<Area>(getContext(),R.layout.spinner_item, areas);
areasAdapter.setDropDownViewResource(R.layout.dropdwon_item);
areasSpinner.setAdapter(areasAdapter);
для getView () адаптер буде використовувати spinner_item.xml
для getDropDownView () адаптер буде використовувати dropdwon_item.xml
то ви можете використовувати власні макети, як вам подобається
сподіваюся, що це допомагає
Для довідки, якщо ви використовуєте, 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);