Halte TextInputLayout immer fokussiert oder halte Label immer erweitert

8

Ich habe mich gefragt, ob es möglich ist, das Label immer erweitert zu halten, unabhängig davon, ob es in EditText Text gibt oder nicht. Ich schaute mich in der Quelle um und es ist eine Verwendung von ValueAnimator und counter innerhalb von TextWatcher , um Änderungen zu animieren oder nicht zu animieren. Vielleicht kann ich eine benutzerdefinierte TextWatcher mit einer benutzerdefinierten ValueAnimator auf der EditText in der TextInputLayout ?

    
AndyRoid 30.01.2016, 02:14
quelle

2 Antworten

7

Die aktuelle Version von TextInputLayout existiert speziell, um eine Sache zu tun - zeige / verberge die Helferbeschriftung, abhängig davon, ob es einen Text in EditText gibt oder nicht. Was du willst, ist ein anderes Verhalten, also brauchst du ein anderes Widget als TextInputLayout . Dieser Fall ist der perfekte Kandidat für das Schreiben einer benutzerdefinierten Ansicht, die Ihren Anforderungen entspricht.

Das heißt, Ihre Idee, ein benutzerdefiniertes TextWatcher auf EditText zu setzen, funktioniert auch nicht, weil TextInputLayout nichts von seinen Interna offen legt, die tatsächlich mit den Animationen umgehen - weder updateLabelVisibility() , setEditText() , der Zauber Handler , der die Arbeit oder irgendetwas anderes erledigt. Natürlich wollen wir für so ein Detail nicht den Reflexionspfad gehen, also ...

Verwenden Sie einfach MaterialEditText ! Es hat die folgende Eigenschaft, die genau das tut, was Sie wollen.

  

met_floatingLabelAlwaysShown : Immer das Floating-Label anzeigen, anstatt es zu animieren. Falsch als Standard.

Die Bibliothek ist ziemlich stabil (ich benutze sie selbst in zwei verschiedenen Projekten) und hat viele Optionen zur Anpassung. Ich hoffe es hilft!

    
Vesko 22.02.2016 22:19
quelle
7

Bei mir mit support design 23.3.0 funktioniert es

%Vor%     
Kaskasi 01.07.2016 10:26
quelle