it-swarm.com.de

Wie kann ich den "deaktivierten" Status eines Spinners deaktivieren

Wenn ich meinen Spinner deaktiviere, sieht er fast genauso aus wie vor der Deaktivierung, d. H.

Vor

enter image description here

Nach dem

enter image description here

Es ist deaktiviert und so funktionell ist alles in Ordnung, aber ich möchte, dass look deaktiviert ist. Diese Frage scheint um die Fallen gestellt worden zu sein (hier und hier zum Beispiel), aber der nächste, der zu einer Antwort kommt, ist this, was unvollständig erscheint und ich sowieso nicht verstehe?!?

Romain sagte es sollte in Froyo behoben werden, aber ich verwende Honeycomb und wie Sie aus den Screenshots sehen können, scheint es nicht zu funktionieren. Jeder Rat wäre dankbar.

28
MisterWeary

Ich weiß nicht, ob Sie das noch brauchen, aber es gibt einen Weg. Ich habe mit diesem Thema selbst zu kämpfen. Am Ende habe ich so etwas gemacht:

((Spinner) spinner).getSelectedView().setEnabled(false);
spinner.setEnabled(false);

Was dies tatsächlich tut, ist, den Spinner und das ausgewählte Element, das angezeigt wird, zu deaktivieren. Am wahrscheinlichsten ist das ausgewählte Element TextView und sollte als deaktiviertes TextView angezeigt werden.

Ich benutze das und es funktioniert. Aber aus irgendeinem mir unbekannten Grund ist es nicht so "ausgegraut" wie andere Ansichten mit Behinderungen. Es sieht jedoch immer noch deaktiviert aus. Versuch es.

43
Bandreid

Eine clevere Art, Spinner deaktiviert zu machen, ist die Transparenz zu senken. 

Spinner spinner = (Spinner) findViewById(R.id.my_spinner);
spinner.setEnabled(false);
spinner.setAlpha(0.5f);
5
PaulrBear

Wenn Sie einen Adapter mit einem benutzerdefinierten Layout erstellen (d. H. R.layout.simple_spinner_item erweitern), fügen Sie dieses Attribut der XML-Datei hinzu: Android:duplicateParentState="true"

4
rymo
((Spinner) spnr).getSelectedView().setEnabled(false);
((Spinner) spnr).setEnabled(false);

spnr ist mein Spinner-Objekt, das sich auf die XML-Ansichtsdatei bezieht, durch findViewById(...).

3
Randika Vishman

Die .getSelectedView() hat bei mir nicht funktioniert. Also habe ich die Spinner dazu gebracht, show zu deaktivieren.

Sie müssen Ihre eigenen Farben für den disabled - Look definieren.

Zum Beispiel:

R.color.blue_text //means enabled
R.color.gray_text //means disabled

So deaktivieren Sie meinen Spinner:

((TextView)mySpinner.getChildAt(0)).setTextColor(getResources().getColor(R.color.gray_text));
mySpinner.setEnabled(false);
mySpinner.setFocusable(false);

Um meinen Spinner zu aktivieren:

((TextView)mySpinner.getChildAt(0)).setTextColor(getResources().getColor(R.color.blue_text));
mySpinner.setEnabled(true);
mySpinner.setFocusable(true);

Sie müssen die Stile nicht ändern oder XML ändern. Tun Sie dies einfach in Ihrem Code, selbst innerhalb von Ereignismethoden sollten Sie in Ordnung sein.

1
Arlyn

das funktionierte für mich ....__ für die Deaktivierung des Spinners

your_spinner.getSelectedView();
your_spinner.setEnabled(false);

und wieder aktivieren 

your_spinner.setEnabled(true);
1
ashish.n

Ich habe folgendes versucht, und es funktioniert wie erwartet für mich:

_userMembership.setEnabled(false);
_userMembership.setClickable(false);
_userMembership.setAlpha((float)0.7);
_userMembership.setBackgroundColor(Color.GRAY);
1
Rabia Abu Hanna

Ich habe festgestellt, dass dies die beste Lösung für die gleiche Frage ist, die zuvor von @ JSPDeveloper01 beantwortet wurde: https://stackoverflow.com/a/20401876/8041634

Da Android den Spinner nach dem Deaktivieren nicht deaktiviert, schlägt er vor, eine benutzerdefinierte Methode zu erstellen, die den .setAlpha-Befehl des Spinners verwendet, wodurch der darin enthaltene Text grau dargestellt wird. Brillant.

0
shagberg

Auf das Konvertieren können Sie auch wie folgt verzichten:

new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
             // Depend on your selection check position and disable it
             if(position == 1) {
                view.setEnabled(false);
                view.setEnabled(false);
             }
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }
 }
0
Pankaj

Mein Fall kann ein Sonderfall sein, entweder aufgrund der Reihenfolge, in der ich meinen Adapter einstelle, oder aufgrund der Tatsache, dass ich einen benutzerdefinierten Spinner verwende (classes:

  1. Die erste Klasse erweitert die LinearLayout-Klasse und 
  2. Die zweite erweitert die Spinner-Klasse.

Die Schlüssel, die ich für das Deaktivieren des Spinners gefunden habe, waren:

  1. Annullieren des alten Objekts in der setEnabled-Funktion und
  2. Einstellung der Farbe in der Funktion onDraw.

In diesen beiden benutzerdefinierten Spinnerklassen habe ich eine spezielle setEnabled-Funktion wie diese, die die alte Ansicht ungültig macht:

public void setEnabled(Boolean enabled) {
    super.setEnabled(enabled);
    invalidate();
}

Ich überschreibe auch die onDraw-Funktion in jedem benutzerdefinierten Spinner class:

@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    if (this.getChildAt(0) != null) {
        this.getChildAt(0).setAlpha(this.isEnabled() ? 1.0f : 0.7f);
    }
}
0
thecoolmacdude

Ansichten können aus mehreren berührbaren Elementen zusammengestellt werden. Sie müssen sie alle wie folgt deaktivieren:

for(View lol : your_spinner.getTouchables() ) {
    lol.setEnabled(false);
}

Wenn es ein einfaches ist, da es sich auch selbst zurückgibt:

Suchen Sie nach allen berührbaren Ansichten, die Nachkommen dieser Ansicht sind, und geben Sie diese möglicherweise zurück.

View # getTouchables ()

0
josetapadas

Ich hatte ein ähnliches Problem, außer dass getChildView null für mich zurückgegeben hat, sodass die ausgenommene Lösung nicht funktioniert hat .. Ich glaube, das liegt daran, dass ich den Adapter in XML eingestellt habe und die Attribute "anklickbar" und "aktiviert" ignoriert habe.

Dies war mein XML:

<Spinner
Android:id="@+id/my_id"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_margin="@dimen/spacing_large"
Android:alpha="0.86"
Android:enabled="false"
Android:clickable="false"
Android:entries="@array/array_of_entries"
Android:spinnerMode="dropdown"/>

Die Lösung für mich bestand darin, die aktivierten und anklickbaren Attribute zu entfernen Und den folgenden Code in meine "onCreate"

spinner.setEnabled(false);

Hoffe es hilft jemandem!

0
maxandron