2011-01-15 4 views
2

Ich wollte eine ListView machen, wo die Elemente zwei pressbare Teile haben, wie die Layouts, die an ein paar Orten in der Android-Telefon/Kontakte-Anwendung angezeigt werden:Seltsames visuelles Problem mit ListView Element Layout mit zwei pressbaren Stücken

http://i55.tinypic.com/358s1lc.jpg

ich habe das Layout feine arbeiten, einschließlich der Ereignisse aus jedem Stück getrennt, mit Ausnahme einer visuellen Ausgabe der Handhabung, wenn das kleinere Stück gedrückt wird. In meiner Anwendung wird das kleinere Stück nur eine kleine Ellipse für den Hintergrund, wenn er gedrückt wird, wie folgt aus:

Beachten Sie, dass eigentlich nicht meine Anwendung ist - das ist NubDial, aber meine Anwendung hat das gleiche Problem . Da NubDial genau die gleiche XML-Layout wie das Telefon App nutzt, ich bin nicht sicher, wie relevant die Listenelement-Layouts sind, aber hier sind sie trotzdem:

Kontaktliste: contacts_list_item.xml
NubDial: contacts_list_item.xml

Does Weiß jemand, was dort passieren könnte?

Antwort

0

Das Layout wurde mit diesem Hintergrund ziehbar für die Schaltfläche auf der rechten Seite:

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

    <item android:state_window_focused="false" 
     android:drawable="@android:color/transparent" /> 
    <item android:state_focused="false" android:state_pressed="true" 
     android:drawable="@*android:drawable/list_selector_background_transition" /> 
    <item android:state_focused="false" android:state_pressed="false" 
     android:drawable="@android:drawable/screen_background_dark"/> 

</selector> 

Kopieren der list_selector_background_transition ziehbar und seine Bilder in meinem Projekt das Problem behoben. Ich dachte, das wäre ziemlich merkwürdig, und ich hätte das System gerne drawbar verwendet, wenn möglich. Wer weiß was los ist?

0

Hmm. Ich habe momentan keine Möglichkeit, das zu testen, aber ich denke, ich habe eine Idee, was Sie tun müssten. Wenn Sie die Quelle durchsuchen, verwendet Google für die Anrufschaltfläche eine benutzerdefinierte Ansicht mit der Bezeichnung DontPressWithParentImageView. Es stellt im Grunde nicht den gedrückten Zustand ein, wenn Sie das Elternelement drücken (das Telefonsymbol bleibt gedrückt, wenn Sie das Kontaktelement drücken).

Ich kann die tatsächliche Adapterquelle jetzt nicht finden, aber was Sie tun sollten, ist, in Ihrem ListAdapter, in der Methode getView(), geben Sie Ihre Aufrufschaltfläche (Ihre DontPressWithParentImageView, in diesem Fall) ein onClickListener() ruft den Dialer mit der Nummer des ausgewählten Kontakts auf. In der Zwischenzeit kann Ihre onListItemClick() - Methode für Ihre ListView die alternative Aktion verarbeiten (z. B. Kontaktdetails anzeigen).

+0

Ich denke, meine Frage wurde etwas falsch betitelt ... Ich habe das Layout und die Click-Handler arbeiten mit einem DontPressWithParentImageView. Mein Problem ist rein visuell: Der seltsame elliptische Hintergrund auf der Ruftaste, wenn er gedrückt wird. Laden Sie NubDial vom Markt herunter, um zu sehen, was ich meine (es ist sowieso eine ziemlich gute App). – jnylen

+0

Was ist der Hintergrund dieses DPWPImageView? Wenn es sich um eine StateListDrawable handelt, überprüfen Sie, welche Drawable für den Status "Gepresst" verwendet wird. Ich kann mir vorstellen, dass es da drinnen ist. – kcoppock

+0

Beide Apps (Phone und NubDial) verwenden das gleiche Zeichen: http://code.google.com/p/nubdial/source/browse/trunk/res/drawable/call_background.xml – jnylen

0

Sie können eine Sache tun. In Ihrem Listenansichtszeilenlayout können Sie die Abschnitte als "Hauptcontainer" aufteilen, der die Ansichtsgruppe "linker Container" und "rechter Container" enthält.

Setzen Sie 'clickable = true' auf den linken und rechten Container, und Sie können die Klicks dann anhand ihrer 'id' identifizieren.

+0

Bearbeitete Frage und Titel zu klären - das Layout funktioniert gut programmatisch, aber ich habe ein visuelles Problem mit dem "richtigen Container", wenn es gedrückt wird. – jnylen