Ich hatte das gleiche Problem.
In meiner App hat der Startbildschirm eine EditText
für die Suche sowie ein schönes großes Logo. Wenn der Benutzer EditText
drückt, um einen Suchbegriff einzugeben, wird die Bildschirmtastatur angezeigt und das Layout so komprimiert, dass die Verwendung von adjustResize
genauso schlecht aussah wie die Verwendung von adjustPan
.
Nach einiger Forschung auf, wie Sie sagen, wenn die Tastatur erscheint und das Lesen this rant from Dianne Hackborn uns zu sagen, dass wir wirklich nicht Pflege, wenn die Tastatur erscheint, entschied ich mich, dies zu überdenken und es als ein Layout-Problem aussehen . Nur wenn die Höhe des Layouts unter einen bestimmten Schwellenwert fiel, hatte ich ein Problem.
Ich habe eine Unterklasse für das Hauptlayout mit einer Überschreibung für onLayout()
erstellt, die ein Callback-Ereignis auslösen würde, wenn a) die Layouthöhe von unter dem Schwellenwert auf über dem Schwellenwert und b) von über dem Schwellenwert auf unter den Schwellenwert gestiegen ist. Je nachdem, wie es läuft, starte ich eine Animation, um entweder das Logo zu entfernen oder es erneut anzuzeigen.
Ich werde diesen Code hier nicht posten, denn wenn ich es jetzt tun würde, würde ich einfach eine ViewTreeObserver.OnGlobalLayoutListener
verwenden, um herauszufinden, wann das Layout geändert wurde. Es wäre am ähnlichsten zu this answer, außer dass ich anstelle der Höhe der Änderung der Höhe, würde ich einen bestimmten Schwellenwert festlegen und die entsprechende Animation ausführen, wenn die Höhe den Schwellenwert überschreitet.
Sie haben Recht, ich hatte das Problem in die falsche Richtung. Die Tastatur ist irrelevant, ist die Layoutgröße, die zählt. Das war ein Augenöffner! –