0

Was ich will:Wenn ich mehr als einen Status zu einer <item> in einer State-Liste einfügbar hinzufügt, funktioniert es nicht mehr. Warum?

Ein ImageView mit einem transparenten Hintergrund. Wenn darauf geklickt wird, sollte sein Hintergrund blau werden und sollte blau bleiben, bis etwas anderes angeklickt wird. Ich benutze die state-list Zeichensätze dafür.

Was geschieht:

Der Code wird wie folgt gegeben. Das Problem ist, dass der Hintergrund blau wird, aber nicht blau bleibt. Also ich dachte, es ist, weil android:state_pressed nur den Moment darstellt, wenn das Widget wird geklickt wird. Also habe ich auch android:state_selected="true" zu button_state_list_drawable.xml direkt nach android:state_pressed="true" hinzugefügt. Was dann passiert ist, ist, dass der Hintergrund nicht mehr blau wurde, selbst wenn die Bildansicht ist, die geklickt wurde.

Wie behebe ich das?

ImageView in XML wie folgt definiert:

<ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/fragment_imageView" 
     android:src="@drawable/ic_photo" 
     android:background="@drawable/button_state_list_drawable" 
     android:clickable="true" /> 

Die button_state_list_drawable.xml ist:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item android:drawable="@drawable/button_pressed_state_drawable" 
     android:state_pressed="true" 
     android:state_selected="true" /> 

    <item android:drawable="@drawable/button_enabled_state_drawable" /> 

</selector> 

Die button_pressed_state_drawable.xml ist:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval" > 

    <size android:width="50dp" 
     android:height="50dp" /> 

    <padding android:left="25dp" 
     android:right="25dp" 
     android:top="25dp" 
     android:bottom="25dp" /> 

    <stroke android:color="#fff" 
     android:width="1dp" /> 

    <solid android:color="#1aafd0" /> 

</shape> 

Die button_enabled_state_drawable.xml ist:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval" > 

    <size android:width="50dp" 
     android:height="50dp" /> 

    <padding android:left="25dp" 
     android:right="25dp" 
     android:top="25dp" 
     android:bottom="25dp" /> 

    <stroke android:color="#fff" 
     android:width="1dp" /> 

    <solid android:color="@android:color/transparent" /> 

</shape> 
+0

Haben Sie versucht, die verbleibenden ['Knopfzustände '] hinzuzufügen (http://developer.android.com/guide/topics/resources/color-list-resource.html) (' focused', 'selected' usw.) Vielleicht passierst du einen Zustand und die Farbe fällt auf den Standard zurück. – yennsarah

Antwort

1

I hatte kürzlich dieses Problem, und das habe ich getan.

In Ihrem button_state_list_drawable.xml, fügen Sie diese irgendwo vor Sie Zustand Punkt Standardeinstellung:

<item android:drawable="@drawable/button_pressed_state_drawable" 
     android:state_selected="true" 
     android:state_pressed="false" /> 

Auch android:state_selected="true" von Ihrem state_pressed Element entfernen.

Dann am Anfang Ihres Klick-Listener für die ImageView, schreiben

yourImageView.setSelected(true); 

Das ist mein Problem gelöst hatte. Hoffe es hilft dir.

1

Ich weiß nicht, ob das die Lösung ist, aber ich muss Code zeigen. Sie haben Ihrem Selektor keinen Standardzustand hinzugefügt und ich kann Ihren ausgewählten Status nicht sehen (Sie haben ihn in Ihre Frage geschrieben, aber Sie haben ihn nicht gepostet). Es muss so etwas wie dieses:

<selector xmlns:android="http://schemas.android.com/apk/res/android" > 


    <item android:drawable="@drawable/button_enabled_state_drawable" 
     android:state_enabled="true" /> 

    <item android:drawable="@drawable/button_pressed_state_drawable" 
     android:state_pressed="true" /> 

    <item android:drawable="@drawable/your_selected_state_drawable" 
     android:state_selected="true" /> 

    <item android:drawable="@drawable/your_button_default_drawable"/> 

</selector> 

Und ich denke, Sie programmatisch den ausgewählten Zustand hinzuzufügen haben (dies bin ich nicht sicher, oder wenn sie es tut automatisch)

yourImageView.setOnClickListener(new OnClickListener(){ 
     @Override 
    public void onClick(View v){ 

     if(yourImageView.isSelected()){ 
      yourImageView.setSelected(false); 
      }else{ 
      yourImageView.setSelected(true); 
      } 
    } 
}); 
+0

Nein, ich hatte es zum selben Zeichen hinzugefügt: ''. Bearbeiten der Frage, um das und den Standardstatus anzuzeigen – Solace

+0

ok, aber setzen Sie den ausgewählten Status programmgesteuert wie ich oben zeige? – Opiatefuchs

+0

Ja, ich werde es einfach versuchen. – Solace