2015-08-18 7 views

Antwort

190

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(); 
    } 
} 
+1

Great! Danke chris –

+0

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? –

+3

@DouglasAlves verwenden neueste 23.0.0 – khusrav

-5

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); 
+1

Also, wenn Sie ein -1 setzen, warum haben Sie sich nicht die Mühe gemacht zu erklären, warum? – Bostone

+5

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

0

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); 
} 
Verwandte Themen