42 Stimmen

Wie erstellt man einen Android-Spinner ohne nach unten zeigendes Dreieck auf der rechten Seite des Widgets?

Ich habe einen Bildschirm, auf dem der Benutzer viele Elemente eingeben muss, so dass der Platz auf dem Bildschirm sehr knapp bemessen ist.

Ich möchte, dass das Widget auf dem Bildschirm (bevor der Benutzer darauf drückt) ähnlich aussieht wie ein EditText oder der linke Teil des Spinner-Widgets (ohne das normale Dreieck nach unten) auf der rechten Seite des Spinners. Wenn der Benutzer dann auf das Widget drückt, wird er/sie den normalen Spinner-Auswahldialog erhalten.

Gibt es einige Spinner-Stil-Attribut kann ich ändern, um dies zu erreichen?

Ich habe einen solchen Code noch nicht gesehen.

Gracias

2voto

Alan Finners Punkte 21

Was den Platz angeht, der benötigt wird, wenn man auf den Spinner klickt, habe ich durch Zufall herausgefunden, dass man die großen Auswahlindikatoren auf der rechten Seite entfernen kann. Sie erhalten eine einfache Liste durch Zeilen getrennt, aber Sie können auf ein Element klicken und es funktioniert immer noch.

Richten Sie einen Spinner wie diesen ein, um die Auswahlindikatoren zu erhalten:

    Spinner s1 = (Spinner) findViewById(R.id.spinner1);
    ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(
            this, R.array.petals, android.R.layout.simple_spinner_item);
    adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    s1.setAdapter(adapter1);

Für keine Indikatoren lassen Sie einfach die setDropDownViewResource-Zeile weg.

1voto

Venugopal Punkte 1278

Warum suchen Sie nicht den Dialog mit der Liste. Erstellen Sie entsprechend Ihren Anforderungen ein Editierfeld, fügen Sie setOnFocusChangeListener hinzu und zeigen Sie dann einen Dialog mit Listenelementen in der Methode onFocusChange(). Für einen Dialog mit Listenelementen

new AlertDialog.Builder(this)
                .setTitle("<Title>")
                .setItems(R.array.<ItemsArrayName>, new DialogInterface.OnClickListener(){
     @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub  
}}).show();

-1voto

Nor Newman Punkte 77

Keine Antwort war für mich hilfreich, daher hier eine wirklich einfache Lösung, die funktioniert hat.

  //some spinner initialisation stuff->
mySpinner.setAdapter(adapter);

  //some spinner initialisation stuff->
mySpinner.getBackground().setColorFilter(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);

Ich kann nicht mit Sicherheit sagen, ob es nur mit einem Standard-Spinner-Layout funktioniert, aber es funktionierte gut mit meinem benutzerdefinierten, dass ich für andere Bedürfnisse erstellt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X