
Die Fähigkeit, transluzent in Android zu verwenden, erschien in KITKAT . Und im richtigen Design sieht es ziemlich beeindruckend aus. Und mit dem Aufkommen der Mode für Geräte mit „Bangs“ scheint es nur eine notwendige Sache bei jedem Start einer warmen Lampe zu sein.
Stellen wir uns eine Situation vor: Sie haben ein umwerfend beeindruckendes Design aufgenommen, das unter der Statusleiste und der Navigationsleiste angezeigt wird. Sie fügen also das Eingabefeld hinzu und verstehen, dass adjustResize für Sie nicht funktioniert.
Sie können:
- Zum Hämmern - schließt der Benutzer die Tastatur selbst, um zu sehen, was sich darunter befindet.
- Weigere dich durchscheinend , der Stil gehört nicht dir, alles wird alt, zuverlässig sein, wie alle anderen auch.
- Sobald der Benutzer mit dem Scrollen beginnt, verstecken Sie die Tastatur. Du bist gut gemacht! Sie haben alles richtig gemacht, Skype macht es sogar unter iOS! Und auch dort gibt es keine Transparenz.
- Verschieben Sie alle Eingabefelder in separate Bildschirme. Als Bonus - jeder zusätzliche Übergang zum Bildschirm, abzüglich Komfort und Konvertierung.
- Spülen Sie Ihre Größe .
Alle Schwierigkeiten durchscheinend
Es gibt verschiedene Schwierigkeiten bei der Implementierung von durchscheinend :
- Das Design für Geräte, die kleiner als KITKAT sind, muss berücksichtigt werden (ich denke, dass dies 2019 fast nicht relevant ist, insbesondere für neue Projekte). Vielleicht ist das Spiel für Geräte, die kleiner als LOLLIPOP sind, die Kerze nicht wert? Dort können Sie keine transparente Navigationsleiste erhalten und der "Chulok" auf solchen Geräten war auch nicht vorhanden.
- Wenn Sie über durchscheinend nachdenken, möchten Sie höchstwahrscheinlich etwas Komplizierteres als einen statischen Hintergrund, etwas, das unter der Statusleiste und der Navigationsleiste gescrollt wird. Dies ist mit fitSystemWindows nicht möglich. Dies bedeutet, dass Sie die Höhe der Statusleiste und der Navigationsleiste dynamisch ersetzen müssen.
- Und schließlich die Hauptsache: adjustResize funktioniert nur ohne durchscheinend oder für die Ansicht, die zu SystemWindows passt .
Worum geht es und wie sollte es funktionieren?

Lösung
Es scheint eine einfache Lösung zu sein: adjustResize funktioniert nicht, daher müssen Sie selbst auf das Öffnen der Tastatur reagieren. Das Problem mit Android bietet jedoch nicht nur die Höhe der zu öffnenden Tastatur (und sie kann auch für verschiedene EditText-Felder unterschiedlich sein), sondern auch die Tatsache, dass sie geöffnet oder geschlossen wird. Es gibt keinen offiziellen Weg. Wie so googeln?
Natürlich gibt es eine Lösung! Und wenn Sie Informationen über die aktuelle Tastaturhöhe haben, können Sie damit tun, was Sie wollen: Fügen Sie für die Ansicht, die auf die Tastatur reagieren soll, eine Auffüllung oder einen Rand von unten hinzu, und jetzt ist die benutzerdefinierte adjustResize bereit.
Code
Um zu verstehen, dass die Tastatur geöffnet war, wird OnGlobalLayoutListener verwendet. Fügen Sie Code-Teile in den Beitrag ein. Ich sehe keinen Grund. Warum 100 Zeilen schreiben, was in 50 Code ausgedrückt wird?
Die Lösung wird im Repository präsentiert .
Schauen Sie sich KeyboardHeightProvider und BaseTranslucentActivity an .
Das Projekt ist so einfach wie möglich, verständlich, es ist nichts Überflüssiges darin, das nicht auf das Problem zutrifft.
Es gibt ein Beispiel für eine einfache TextView, RecyclerView und ScrollView. Die gleiche Technik wurde getestet und funktioniert hervorragend für NestedScrollView, NestedFragments, CoordinatorLayout, ViewPager usw.
Ps: https://developer.android.com/reference/android/view/WindowInsets löst das Tastaturproblem nicht schlimmer.