Ein Beispiel Nutzung:Wie lege ich ein anderes Thema für das Dropdown-Menü eines Spinner fest?
Der Spinner ist dunkel Themen, aber ich möchte, dass die Drop-Down-Licht Themen sein.
Ein Beispiel Nutzung:Wie lege ich ein anderes Thema für das Dropdown-Menü eines Spinner fest?
Der Spinner ist dunkel Themen, aber ich möchte, dass die Drop-Down-Licht Themen sein.
Android M
Neu in Android 6.0, Spinner hat jetzt die android:popupTheme
Parameter, die Sie das Thema für das Popup (Drop-Down) verwendet festlegen können.
können Sie es verwenden, wie so:
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:popupTheme="@android:style/ThemeOverlay.Material.Light" />
, die auf Geräten funktionieren API-Ebene läuft 23+, aber nicht auf Geräten eine niedrigere Version von Android läuft.
AppCompat
Hier AppCompat kommt in. Die Spinner-Implementierung unterstützt auch popupTheme
, aber es ist ein bisschen mehr beteiligt richtig zu machen.
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
Danach müssen Sie Ihren Adapter aktualisieren, um mit AppCompat arbeiten zu können. Sie tun dies, indem Sie es die neue ThemedSpinnerAdapter
Schnittstelle implementieren.
Diese Methoden werden von Spinner verwendet, um dem Adapter mitzuteilen, welches Thema zum Aufblasen von Dropdown-Ansichten verwendet werden soll. Um dies so einfach wie möglich zu machen, haben wir Ihnen eine Helper
Klasse gegeben, die Sie an Ihren Adapter anschließen können. Diese
bedeutet, dass Ihr Adapter wird so etwas wie: in Ihrem Layout-Ordner machen einen spinner_item.xml:
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();
}
}
Sie dies versuchen können
<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" />
dann diesen Code verwenden:
spinnerAdapter = new ArrayAdapter<String>(R.layout.spinner_item,items);
Also, wenn Sie ein -1 setzen, warum haben Sie sich nicht die Mühe gemacht zu erklären, warum? – Bostone
Ich denke, weil es ziemlich offensichtlich ist, beantwortet es die Frage nicht. Die Frage bezieht sich auf das Setzen eines Themas, ich sehe in dieser Antwort keinen Hinweis auf das Thema. Nur damit wir klar sind, habe ich das nicht heruntergestimmt, andere sind schon genug damit beschäftigt. – 2Dee
Nur als Referenz, wenn Sie die CursorAdapter
Ihre Imp verwenden lementation kann viel einfacher, nur newView()
außer Kraft gesetzt werden, keine Notwendigkeit getDropDownView()
es außer Kraft zu setzen:
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return mDropDownHelper.getDropDownViewInflater().inflate(R.layout.list_item, parent, false);
}
Great! Danke chris –
Hallo, ich konnte ThemedSpinnerAdapter nicht innerhalb der appcompat-v7 finden. Ich benutze Version 22.2.1. Muss ich etwas anderes machen, um es zu importieren? –
@DouglasAlves verwenden neueste 23.0.0 – khusrav