Відповіді:
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);