Jawaban:
Android M
Baru di Android 6.0, Spinner sekarang memiliki android:popupThemeparameter yang memungkinkan Anda untuk mengatur tema yang digunakan untuk popup (dropdown).
Anda dapat menggunakannya sebagai:
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:popupTheme="@android:style/ThemeOverlay.Material.Light" />
Itu akan berfungsi pada perangkat yang menjalankan API level 23+, tetapi tidak pada perangkat yang menjalankan versi Android yang lebih rendah.
AppCompat
Di sinilah AppCompat berperan. Implementasi Spinner-nya juga mendukung popupTheme, tetapi sedikit lebih terlibat untuk melakukannya dengan benar.
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
Setelah itu, Anda perlu memperbarui Adaptor Anda agar dapat bekerja dengan AppCompat. Anda melakukannya dengan membuatnya mengimplementasikan ThemedSpinnerAdapterantarmuka baru .
public class MyAdapter extends BaseAdapter implements ThemedSpinnerAdapter {
Theme getDropDownViewTheme() { ... }
void setDropDownViewTheme(Theme theme) { ... }
}
Metode ini digunakan oleh Spinner agar dapat memberi tahu Adaptor tema mana yang akan digunakan untuk meluaskan tampilan drop-down. Untuk membuatnya semudah mungkin, kami telah memberi Anda Helperkelas yang dapat Anda colokkan ke adaptor Anda.
Ini berarti adaptor Anda menjadi seperti:
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();
}
}
untuk panah pemintal, saya telah menggunakan android:backgroundTint="@color/white"ini akan bekerja dari API 21
untuk tampilan pemintal dan tampilan tarik-turun:
ArrayAdapter<Area> areasAdapter = new ArrayAdapter<Area>(getContext(),R.layout.spinner_item, areas);
areasAdapter.setDropDownViewResource(R.layout.dropdwon_item);
areasSpinner.setAdapter(areasAdapter);
untuk getView () adaptor akan menggunakan spinner_item.xml
untuk getDropDownView () adaptor akan menggunakan dropdwon_item.xml
lalu Anda dapat menggunakan tata letak khusus sesuka Anda
semoga membantu
Hanya untuk referensi jika Anda menggunakan CursorAdapterimplementasi Anda bisa jauh lebih mudah, cukup timpa newView(), tidak perlu menimpa di getDropDownView()sana:
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return mDropDownHelper.getDropDownViewInflater().inflate(R.layout.list_item, parent, false);
}
Anda dapat mencoba ini: di folder tata letak Anda, buat 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" />
lalu gunakan kode ini:
spinnerAdapter = new ArrayAdapter<String>(R.layout.spinner_item,items);