Jawaban:
Android M
Baru di Android 6.0, Spinner sekarang memiliki android:popupTheme
parameter 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 ThemedSpinnerAdapter
antarmuka 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 Helper
kelas 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 CursorAdapter
implementasi 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);