2013-08-22 11 views
8

I umgesetzt ClearableEdittext und es funktioniert perfekt, außer auf 4.3, wo die logcat flutet mich mit:ClearableEditText - requestLayout() nicht richtig auf Android 4.3 genannt

W/View(16611): requestLayout() improperly called by com.[myPackage].ui.widgets.ClearableEditText{42233dd0 VFED..CL .F....ID 0,0-708,88 #7f050127 app:id/SearchEdittext} during layout: running second layout pass 
W/View(16611): requestLayout() improperly called by com.[myPackage].ui.widgets.ClearableEditText{42233dd0 VFED..CL .F....ID 0,0-708,88 #7f050127 app:id/SearchEdittext} during layout: running second layout pass 
W/View(16611): requestLayout() improperly called by com.[myPackage].ui.widgets.ClearableEditText{42233dd0 VFED..CL .F...... 0,0-708,88 #7f050127 app:id/SearchEdittext} during second layout pass: posting in next frame 

und wenn sie in der EditText kein Text auftaucht eingeben. Nachdem das Logcat gestartet wurde, wird die Benutzeroberfläche außer der Soft-Tastatur eingefroren.

Finden Sie keine Informationen dazu im Internetz. Und requestLayout() muss innerhalb Edittext/Textview-Klasse aufgerufen werden, weil ich es nie aufrufen. Weiß jemand von Ihnen, wie man das behebt oder was den Fehler verursacht?

EDIT1 OK, so dass das Problem verschwindet, wenn ich die Zeile aus kommentieren:

setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[1], x, getCompoundDrawables()[3]); 

Ich habe versucht, dies als runnable der Ansicht der UI-Warteschlange Posting aber kein Text auftaucht.

EDIT2 Ich habe this video eines Android Developer gesehen zu erklären, dass etwas rekursive während onLayout passiert, aber noch einmal, ich nur EditText Unterklasse.

EDIT3 Ich habe auch versucht, die Verbindung ziehbar verwirft und andere ImageView auf dem EditText verwenden, aber es hat etwas mit dem Layout zu tun passiert, wenn etwas auf dem Edittext Zeichnung ich der rekursive Aufruf glauben ... ist passiert immer noch und blockiert die Benutzeroberfläche. Ich weiß nicht, was ich als nächstes ... versuchen soll. 4.3 sx

EDIT4 Ich endete mit einem linearen Layout mit horizontaler Ausrichtung und benutzerdefinierten 9 Patch-Zeichen für den Hintergrund der Komponenten. Im Layout habe ich einen normalen edittext mit meinem eigenen 9patch Bg und dann einen ImageButton mit einem anderen benutzerdefinierten 9patch Bg.

Etwas wie folgt aus:

enter image description here

Die rote Linie begrenzt den EditText vom Image. Es funktioniert jetzt auf 4.3

Antwort

1

Ein bisschen spät Antwort, aber ich hatte gerade ein verwandtes Problem mit der ClearableEditText-Komponente.

Es scheint, dass aufgrund der Änderung von CompoundDrawables in setClearIconVisible() eine ewige Schleife von onfocus Ereignissen ausgelöst wird.

Ich habe die setClearIconVisible geändert, um nur das Zeichen zu ändern, wenn es echte Änderungen gibt.

protected void setClearIconVisible(boolean visible) { 
     boolean wasVisible = getCompoundDrawables()[2] != null; 
     if(wasVisible == visible) return; 

     setCompoundDrawables(oldDrawables[0], oldDrawables[1], x, oldDrawables[3]); 
     setCompoundDrawablePadding(oldPadding); 
    } 

Das behoben mein Problem mit der Tastatur nicht wieder auftauchen. Eine ewige Schleife von onfocus-Events wird niemandem etwas nützen. Es fügt noch eine weitere Runde von Layout und FocusedChanged hinzu, so dass es eine cleverere Lösung dafür geben könnte. Mir geht es gut mit einer zusätzlichen Runde, tho.

Ich habe auch eine Pull-Anfrage an den Entwickler gesendet, https://github.com/yanchenko/droidparts/pull/31.

1

versuchen, klare Methode OnFocusChange. Es hilft mir

+0

das könnte funktionieren, nur die Schaltfläche wird immer angezeigt, nachdem Text eingegeben wurde. Nun, ich denke, wir können eine if-Klausel im onFocusChange für Version 4.3 platzieren. vielleicht wird dies mit der Zeit auf der Android-Seite behoben werden – androidu

1

Ich endete mit zwei separaten Ansichten für die edittext und clear btn, siehe meine Frage bearbeitet.

Verwandte Themen