Respostas:
Android M
Novo no Android 6.0, o Spinner agora tem o android:popupTheme
parâmetro que permite definir o tema usado para o pop-up (menu suspenso).
Você pode usá-lo como:
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:popupTheme="@android:style/ThemeOverlay.Material.Light" />
Isso funcionará em dispositivos com API de nível 23+, mas não em dispositivos que executam uma versão anterior do Android.
AppCompat
É aqui que entra o AppCompat. Sua implementação Spinner também oferece suporte popupTheme
, mas é um pouco mais envolvente para acertar.
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
Depois disso, você precisa atualizar seu adaptador para poder funcionar com o AppCompat. Você pode fazer isso implementando a nova ThemedSpinnerAdapter
interface.
public class MyAdapter extends BaseAdapter implements ThemedSpinnerAdapter {
Theme getDropDownViewTheme() { ... }
void setDropDownViewTheme(Theme theme) { ... }
}
Esses métodos são usados pelo Spinner para informar ao adaptador qual tema usar para aumentar as visualizações suspensas. Para tornar isso o mais fácil possível, oferecemos a você uma Helper
classe que você pode conectar ao seu adaptador.
Isso significa que seu adaptador se torna algo como:
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();
}
}
para seta giratória, usei android:backgroundTint="@color/white"
que funcionará a partir da API 21
para visualização giratória e visualização suspensa:
ArrayAdapter<Area> areasAdapter = new ArrayAdapter<Area>(getContext(),R.layout.spinner_item, areas);
areasAdapter.setDropDownViewResource(R.layout.dropdwon_item);
areasSpinner.setAdapter(areasAdapter);
para getView (), o adaptador usará spinner_item.xml
para getDropDownView (), o adaptador usará dropdwon_item.xml
então você pode usar seus layouts personalizados como quiser
espero que ajude
Apenas para referência, se você usar o, CursorAdapter
sua implementação pode ser muito mais fácil, apenas substitua newView()
, não há necessidade de substituir getDropDownView()
lá:
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return mDropDownHelper.getDropDownViewInflater().inflate(R.layout.list_item, parent, false);
}
você pode tentar isso: na pasta de layout, faça um 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" />
então use este código:
spinnerAdapter = new ArrayAdapter<String>(R.layout.spinner_item,items);