Für Android transparent und adjustResize

  • Tutorial


Die Fähigkeit, transluzent in Android zu verwenden, trat sogar in KITKAT auf . Und es sieht im richtigen Design ziemlich beeindruckend aus. Und mit dem Aufkommen von Mode für Geräte mit „Bangs“ scheint dies bei jedem Warmstart von Röhren eine Notwendigkeit zu sein.


Stellen wir uns eine Situation vor: Sie haben ein erstaunlich schönes Design aufgeschrieben, das unter Statusleiste und Navigationsleiste blättert. Und hier fügen Sie ein Eingabefeld hinzu und verstehen, dass adjustResize für Sie nicht funktioniert.


Sie können:


  1. Um zu punkten, schließt der Benutzer die Tastatur selbst, um zu sehen, was sich darunter befindet.
  2. Verlassen Sie sich durchscheinend , der Stil gehört nicht Ihnen, alles wird alt und zuverlässig, wie alle anderen auch.
  3. Sobald der Benutzer mit dem Scrollen beginnt, blenden Sie die Tastatur aus. Du bist gut gemacht! In Ordnung, Skype macht es auch unter iOS! Und es gibt keine Transparenz.
  4. Verschieben Sie alle Eingabefelder in separate Bildschirme. Als Bonus - jeder zusätzliche Übergang zum Bildschirm, ohne Komfort und Konvertierung.
  5. Reduzieren Sie Ihre adjustResize .

Alle durchscheinende Komplexität


Bei der transluzenten Implementierung gibt es mehrere Schwierigkeiten:


  1. Es ist notwendig, das Design für Geräte mit weniger KITKAT zu berücksichtigen (ich denke, dass dies im Jahr 2019 nahezu irrelevant ist, insbesondere für neue Projekte). Vielleicht lohnt sich für Geräte unter LOLLIPOP ein Kerzenspiel nicht? Sie können auf solchen Geräten auch keine transparente NavigationBar und „Man“ erhalten.
  2. Wenn Sie über transluzent nachdenken , möchten Sie höchstwahrscheinlich etwas Komplizierteres als einen statischen Hintergrund, etwas, das unter der Statusleiste und der Navigationsleiste angezeigt wird. Dies können Sie jedoch nicht mit FitsSystemWindows machen , dh Sie müssen die Höhe der Statusleiste und der Navigationsleiste dynamisch ersetzen.
  3. Und zum Schluss noch die Hauptsache: adjustResize funktioniert nur ohne Durchsicht oder für die Ansicht, die zu SystemWindows passt .

Worum es geht und wie es funktionieren soll



Lösung


Es scheint eine einfache Lösung zu sein: adjustResize funktioniert nicht , es bedeutet, dass auf das Öffnen des Claviarot selbst reagiert werden muss. Das Problem-Android stellt jedoch nicht nur die Höhe der Tastatur zur Verfügung (und es kann sich sogar für verschiedene EditText-Felder unterscheiden), sondern auch für das Öffnen oder Schließen. Es gibt keinen offiziellen Weg. Wie so google


Natürlich gibt es eine Lösung! Und wenn Sie Informationen zur aktuellen Höhe der Tastatur haben, können Sie damit machen, was Sie möchten: Fügen Sie am unteren Rand für die Ansicht Padding oder einen Rand hinzu, der auf die Tastatur reagieren soll, und jetzt ist custom adjustResize fertig.


Code


Um zu verstehen, dass die Tastatur geöffnet wurde, verwenden Sie OnGlobalLayoutListener . Das Einbetten von Code-Teilen in den Beitrag sieht den Punkt nicht. Warum 100 Zeilen über das schreiben, was in Code über 50 ausgedrückt wird?
Die Lösung des Problems wird im Repository angezeigt .


Schauen Sie sich KeyboardHeightProvider und BaseTranslucentActivity genauer an .


Das Projekt ist so einfach wie möglich und verständlich, es gibt nichts überflüssiges, das nicht mit dem Problem zusammenhängt.
Es gibt ein Beispiel für eine einfache TextView, RecyclerView und ScrollView. Die gleiche Technik wurde für NestedScrollView, NestedFragments, CoordinatorLayout, ViewPager usw. getestet und funktioniert einwandfrei.


Ps: https://developer.android.com/reference/android/view/WindowInsets löst das Problem auch mit der Tastatur.


Jetzt auch beliebt: