2016-05-14 15 views
0

Ich habe ein Design, wo es einen Eingang EditText mit einer Reihe von Optionen für Eingabeeinheiten (RadioGroup voller RadioButtons) gibt. Wenn der Benutzer eine bestimmte Option auswählt, habe ich ViewGroup.LayoutParams implementiert, um die Breite auf den erforderlichen Wert einzustellen.Cursor in falscher Position bei der Größenänderung EditText mit animateLayoutChanges

Alles funktioniert normalerweise gut, aber wenn ich animateLayoutChanges fügen Sie das gesamte Erscheinungsbild zu verbessern, wird der Cursor in der EditView negativ beeinflusst:

  • Der Benutzer gibt einen Wert, erscheint alles normal (Schwerkraft ist direkt in der EditText übrigens
  • Die Option, die die Ansicht verkleinert wird überprüft - die Ansicht animiert schrumpft richtig - aber - der Eintrag ist jetzt aus den Augen! Versteckt, wo es hätte sein sollen. Wenn Sie in das Feld klicken oder die Option RadioButton auf eine mit der gleichen Größe ändern, bewegt sich der Eintrag an die entsprechende Position ...
  • Ähnlich - die Ansicht ist klein und hat einen Eintrag in der richtigen Position, eine Option wo die Ansicht erweitert wird, wird ausgewählt - jetzt wird die Ansicht erweitert und der Eintrag wird in der Mitte der Ansicht belassen, anstatt sich an die richtige Position zu bewegen! Wieder erfrischt es, wenn in Bezug auf eine andere Aktion den EditText durchgeführt wird ..

Ich habe versucht, dieses Problem zu beheben durch:

  • Speichern der Eingabezeichenfolge in eine temporäre Variable und mit setText()
  • Mit ersetzen append("") nichts hinzuzufügen vor dem erneuten hinzufügen der Zeichenkette
  • Aufruf .requestFocus() im EditText bei Auswahl
  • die Ansicht mit .invalidate()
  • Einstellen der Cursor an das Ende der
  • Den Versuch, benutzerdefinierte-Set Animationen Ansicht Redrawing (ohne Erfolg, kann ich mit diesem Ansatz fortzusetzen habe?)

Wenn jemand weiß, Wie kann ich die Ansicht möglicherweise aktualisieren, so dass sie die Textposition aktualisiert oder die Animation auf diese Ansicht deaktiviert, während alle anderen beibehalten werden, wäre das großartig!

Danke!

+0

Können Sie Ihren Beispielcode angeben, um zu verstehen, was Sie versuchen und nicht funktionieren? – mqpasta

+0

Hallo, sicher kann ich, aber ich sehe nicht, wie es hilft - keine der oben genannten Methoden aktualisieren die Ansicht, so dass es die Cursorposition ändert .. Ich brauche nur eine Möglichkeit, es nach dem Ende der animateLayoutChanges Animation zu aktualisieren. Ich habe versucht, es zu setzen, um das Ende der Animation programmgesteuert zu überprüfen, aber das verwendet einen Layout-Übergang und keine Animation. Gibt es etwas in der Frage, die Sie nicht verstehen? – Michal

Antwort

0

Ich habe schließlich eine Lösung erarbeitet ..! Hier ist es für diejenigen, die sich in einer ähnlichen Situation befinden. Ich habe animateLayoutChanges auf false gesetzt und die anderen Übergänge animiert - in meinem Fall waren es TextViews neben dem EditText, die beim Ändern der Größe erschienen und verschwanden. Ich musste die .animate(). Alpha (float) Methode wie unten verwenden.

Für immer sichtbar:

textViewFractionIn.setVisibility(View.VISIBLE); 
textViewFractionIn.animate() 
    .alpha(1.0f) 
    .setListener(new AnimatorListenerAdapter() { 
     @Override 
     public void onAnimationEnd(Animator animation) { 
      super.onAnimationEnd(animation); 
      // Has to be blank it seems to override the previous .setListener in the GONE case? 
      } 
     }); 

Und für sie unsichtbar (GONE in diesem Fall) zu machen:

textViewFractionIn.animate() 
    .alpha(0.0f) 
    .setListener(new AnimatorListenerAdapter() { 
     @Override 
     public void onAnimationEnd(Animator animation) { 
      super.onAnimationEnd(animation); 
      textViewFractionIn.setVisibility(View.GONE); 
      } 
     }); 

Dies das Verblassen von Ansichten als standardmäßig animiert, aber alle Bewegungen der Ansichten bleiben diskret und somit bleibt der EditText-Cursor an der richtigen Stelle!

Verwandte Themen