Anzeige scrollen bei eingeblendeter Tastatur

  • Antworten:14
  • Bentwortet
p a
  • Forum-Beiträge: 131

09.01.2012, 10:20:57 via Website

Hallo,

ich habe ein Adressdaten-Formular in meiner App, das ist natürlich nicht mehr komplett sichtbar wenn die Tastatur eingeblendet ist, darum würde ich das gerne scrollbar machen in dem Fall, hat da mal jemand einen Tip für mich?

Antworten
Johannes Borchardt
  • Forum-Beiträge: 114

09.01.2012, 12:49:18 via Website

Da empfehle ich eine ScrollView ;)

Antworten
p a
  • Forum-Beiträge: 131

09.01.2012, 16:42:14 via Website

joa
ScrollView habe ich auch schon getestet
aber das funktioniert nicht und ich komme nicht dahinter warum.
Wenn ich eine ScrollView entsprechend einbaue dann rücken die Button am unteren Bildrand noch ein Stück weiter nach unten und die ganze Displayanzeige wird scrollbar, heisst wichtige Elemente werden rausgeschoben obwohl sie noch Platz hätten und ich kann trotzdem nicht den Bildschirminhalt im freien Teil oberhalb der Tastatur scrollen.

Das wichtigste hierbei ist: Ich verstehe nicht warum!

Antworten
Tobias Eckert
  • Forum-Beiträge: 155

09.01.2012, 21:26:18 via Website

Weiss nicht ob es das ist wonach Du suchst, aber Du kannst Einstellen wie sich der Bildschirm verhält wenn die Tastatur eingeblendet wird über das Setting android:windowSoftInputMode im Manifest.

Antworten
p a
  • Forum-Beiträge: 131

10.01.2012, 10:07:54 via Website

Klingt vielversprechend, aber tut leider nicht ganz was ich suche (hab jetzt alle Optionen durchprobiert, auch die die laut Doku nicht wirklich Sinn ergaben)

Auch das Ganze in eine ScrollView einzubauen hat nicht wirklich zum Ergebnis geführt, da er mir dann das Layout ganz merkwürdig verschiebt, bin hier langsam echt am verzweifeln.

Antworten
Felix
  • Forum-Beiträge: 259

10.01.2012, 11:26:11 via Website

Tach!

Dieses Problem dürften schon Heerscharen von Android-Entwicklern gesehen haben. Und wenn man halbwegs passende Suchbegriffe verwendet, bestätigt sich diese These. Mit „android keyboard scroll“ fand ich diese Frage bei Stackoverflow gestellt. Dort wurde auf Onscreen Input Methods verwiesen, wo das Thema augenscheinlich (ich habs nicht gelesen) recht ausführlich behandelt wird. Man muss da also nichts basteln sondern kann den bereits vorhergesehenen Weg nehmen.


Felix.

— geändert am 10.01.2012, 11:27:42

Antworten
p a
  • Forum-Beiträge: 131

10.01.2012, 14:35:56 via Website

Ja, ich weiss, diese Threads habe ich auch schon (fast) alle gelesen.

Mein Problem ist aber einfach dass ich nicht erreichen will dass automatisch gescrollt wird wenn man mit der "Weiter"-Taste auf der Tastatur zum nächsten Feld springt, sondern ich will in der Lage sein mit dem Finger das Formular hoch zu scrollen, damit man die verdeckten Felder manuell anwählen kann. Der Kunde (iPhone-User) meint das wäre besonders gute Usability, ich persönlich meine das ist größtenteils vom iPhone erlerntes Verhalten, aber in gewisser Weise schon intuitiv, das möchte ich auch nicht ganz bestreiten.

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

12.01.2012, 19:05:04 via Website

Wenn ich eine ScrollView entsprechend einbaue dann rücken die Button am unteren Bildrand noch ein Stück weiter nach unten und die ganze Displayanzeige wird scrollbar

Dir ist aber schon klar das du das beeinflussen kannst, indem du nicht das komplette Layout in die Scrollview packst, sondern nur die Teile,die auch scrollen sollen?

Probleme mit irgendwelchen Verschiebungen hatte ich dabei noch nie, obwohl ich dieses Konzept sehr oft verwende (schon weil sich nicht jedes Layout sinnvoll auf Querbetrieb optimieren lässt).
Es scheint also eher so zu sein, dass du bei der Umsetzung irgendwas falsch machst :P


Der Kunde (iPhone-User) meint das wäre besonders gute Usability, ich persönlich meine das ist größtenteils vom iPhone erlerntes Verhalten

Ich würde mich da eher dem Kunden anschließen -- warum soll ich bei einem nicht vollständig auszufüllenden Formular 10mal "weiter" klicken, wenn ich schneller und direkter das nächste zu beschreibende Feld per wisch/klick auswählen kann?
...und warum soll ich die Tastatur schließen, zum Ende scrollen und den Speichern-Knopf (oder was auch immer) klicken, wenn ich das auch direkt haben kann?

Antworten
p a
  • Forum-Beiträge: 131

12.01.2012, 19:34:57 via Website

ja, mir ist natürlich klar dass ich nicht das komplette Layout in das ScrollView packen muss, damit habe ich auch schon extensiv experimentiert, das gewünschte Ergebnis (Bild oben, scrollbares Formular in der Mitte, Buttons unten) erreiche ich damit aber nicht.
Hab auch schon das gesamte Layout sorgfältig neu aufgebaut, aber führte auch nicht zum gewünschten Ergebnis.
Hab auch schon eine seperate App erstellt mit genau diesem Layout, damit ich unbefangener experimentieren kann ... auch nix.

Das Problem ist halt, entweder sind die Buttons im ScrollView, dann sind sie aber nicht am unteren Bildrand, weil das ScrollView aus irgendeinem Grund nicht sein Parent matched.
Oder ...
Die Buttons ausserhalb der ScrollView, dann sind sie am unteren Bildrand (RelativeLayout, alignParentBottom), aber wenn sich die Tastatur ausklappt sind sie oberhalb der Tastatur (ist ja auch klar, ist ja der neue ParentBottom) und verdecken, wenn man ganz runter gescrollt hat, die unteren 1 1/2 Formularfelder.

Ich würde mich da eher dem Kunden anschließen -- warum soll ich bei einem nicht vollständig auszufüllenden Formular 10mal "weiter" klicken, wenn ich schneller und direkter das nächste zu beschreibende Feld per wisch/klick auswählen kann?

Das Formular hat keine 10 Felder und es sind alles Pflichtfelder, "Weiter" klicken ist also tatsächlich die komfortablere Variante, anstatt immer das Layout ein paar Pixel weiterzuwischen und das nächste Feld "per Hand" zu wählen.

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

12.01.2012, 20:21:44 via Website

Ach das meintest du mit "verschoben"...
Ja, dann ist alles "richtig";
Die Tastatur wird immer unten ans Layout angefügt, du musst dich also entscheiden, ob die Knöpfe geschoben oder gescrollt werden -- oder ob du ein anderes Layout wählst.
Das die unteren Knöpfe überdeckt und der Rest gescrollt wird, ist mW nicht möglich.


Das Formular hat keine 10 Felder und es sind alles Pflichtfelder

Also würdest du es je nach Bedarf mal so und mal so lösen, und das für guten Stil halten?

Antworten
p a
  • Forum-Beiträge: 131

13.01.2012, 08:59:17 via Website

Nein, "das" meinte ich nicht mit verschoben (sofern "das" heissen soll was ich denke), denn die Buttons werden genau genommen nicht verschoben, bei ein- und ausgeklappter Tastatur sind sie immer an der gleichen Stelle (parentBottom). Mit verschoben meine ich dass das ScrollView sein parent nicht ausfüllt (ja, ScrollView height steht auf match_parent) und dann die Buttons nach oben verschoben sind.
... und das ich mich zwischen "Buttons oberhalb der Tastatur" und "Buttons werden mitgescrollt" entscheiden muss ist mir auch klar.
aber ...
Wenn die Buttons oberhalb der Tastatur sind verdecken sie die 1 1/2 unteren Formularfelder und wenn die Buttons mitgescrollt werden sitzen sie nicht am unteren Rand des Layouts (s.o.) und dann ist das Layout nicht mehr einheitlich mit der vorherigen und der nächsten Activity. Wenn ich also schon (widerwillig) die Scrollmöglichkeit einbauen muss, dann fänd ich es schön wenn sich das Formular soweit scrollen lassen würde dass das untere Formularfeld wieder oberhalb der Buttons ist.

Also würdest du es je nach Bedarf mal so und mal so lösen, und das für guten Stil halten?
Ich würde "was der Kunde will" nicht unbedingt mit "je nach Bedarf" gleichsetzen.
Meine persönliche Preferenz ist die Verwendung der "Weiter"-Buttons, denn dafür sind die ja da und sollte ich dann doch mal, wider Erwarten (und wider Usability) ein Formular mit 20 nicht-Pflichtfeldern machen würde ich (nach der Usability) auch guten Stil opfern und beide Möglichkeiten einbauen.

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

13.01.2012, 10:54:39 via Website

und dann die Buttons nach oben verschoben sind.

Das meinte ich mit "das" ;)
Die ScrollView wird im übrigen den Screen schon komplett ausfüllen (kannst du im grafischen Editor prüfen), nur gibt es da natürlich kein ParentBottom, weshalb deine Buttons unter dem letzten Eingabefeld positioniert werden.


Wenn die Buttons oberhalb der Tastatur sind verdecken sie die 1 1/2 unteren Formularfelder

Soll heißen das die Buttons dann "über" dem ScrollView liegen, so das du an den unteren Teil gar nicht heran kommst?


Ich würde "was der Kunde will" nicht unbedingt mit "je nach Bedarf" gleichsetzen.

Das habe ich auch nicht gemeint, sondern das:
sollte ich dann doch mal, wider Erwarten (und wider Usability) ein Formular mit 20 nicht-Pflichtfeldern machen würde ich (nach der Usability) auch guten Stil opfern und beide Möglichkeiten einbauen

Also: mal funktioniert es, mal nicht, je nach Bedarf, und der Anwender kann das nicht unterscheiden, außer durch ausprobieren.

p a

Antworten
p a
  • Forum-Beiträge: 131

13.01.2012, 11:42:16 via Website

Die ScrollView wird im übrigen den Screen schon komplett ausfüllen (kannst du im grafischen Editor prüfen), nur gibt es da natürlich kein ParentBottom, weshalb deine Buttons unter dem letzten Eingabefeld positioniert werden.
Ahhhhh *lampe geht an*
Heisst die verfügbare Höhe in dem ScrollView ist quasi immer WrapContent, darum dehnt er das eingebettete Layout nicht auf die ganze Bildschirmhöhe aus und somit liegen die Buttons am ParentBottom vom eingebettetem Layout, nur geht das Layout eben nicht bis an den unteren Bildschirmrand das erklärt einiges.

Soll heißen das die Buttons dann "über" dem ScrollView liegen, so das du an den unteren Teil gar nicht heran kommst?
Genau das soll es heissen, die Frage ist jetzt halt wie kriege ich es hin dass er das ScrollView noch so weit nach oben schiebt dass die Formularfelder nicht mehr von den Buttons verdeckt werden.

Also: mal funktioniert es, mal nicht, je nach Bedarf, und der Anwender kann das nicht unterscheiden, außer durch ausprobieren.
Aber genau das baue ich doch eben nicht aus irgendwelchen funktionalen Gründen ein oder was auch immer, sondern weil der Kunde es will.
Wenn du also sagst "je nach Bedarf" dann setzt du es mit "was der Kunde will" gleich, denn ich mache es nunmal nicht "je nach Bedarf" sondern, weil der Kunde es will.

sollte ich dann doch mal, wider Erwarten (und wider Usability) ein Formular mit 20 nicht-Pflichtfeldern machen würde ich (nach der Usability) auch guten Stil opfern und beide Möglichkeiten einbauen.
... und falls du die Ironie daran nicht verstanden hast, ich würde nicht auf die Idee kommen ein derart großes Formular für die begrenzten Anzeige- und Steuermöglichkeiten eines Smartphones zu bauen

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

13.01.2012, 13:18:02 via Website

somit liegen die Buttons am ParentBottom vom eingebettetem Layout, nur geht das Layout eben nicht bis an den unteren Bildschirmrand das erklärt einiges

Genau.


die Frage ist jetzt halt wie kriege ich es hin dass er das ScrollView noch so weit nach oben schiebt dass die Formularfelder nicht mehr von den Buttons verdeckt werden.

Hm... den ScrollView mal als IsScrollContainer (oder so ähnlich) markiert?
Höhe auf wrap_content setzen (meckert Lint glaubich sonst auch an)
Kein minHeight setzen ;)


Aber genau das baue ich doch eben nicht aus irgendwelchen funktionalen Gründen ein oder was auch immer, sondern weil der Kunde es will.

Das sehe ich dann halt anders: man kann Fälle erdenken, in denen die Scrollbarkeit effizienteres Arbeiten ermöglicht, also baue ich es für diese Fälle ein, und dann eben, der Einheitlichkeit halber, auch für alle anderen Fälle, damit sich die App überall gleich anfühlt und weil der User halt nicht "sehen" kann, wo es nun geht und wo nicht.


ich würde nicht auf die Idee kommen ein derart großes Formular für die begrenzten Anzeige- und Steuermöglichkeiten eines Smartphones zu bauen

...und ich würde niemals nie sagen ;)
Natürlich würde ich wo irgend möglich auf Scrolling verzichten, aber umgekehrt nicht behaupten, das kein Fall denkbar ist, in dem viele Felder auf einem Formular sinnvoll sind.

p a

Antworten
p a
  • Forum-Beiträge: 131

13.01.2012, 14:42:42 via Website

FillViewport!!! FillViewport :what::what::what:

Das war die Lösung!!!

FillViewport und die Buttons nicht in das ScrollView packen, sondern unter dem ScrollView in ein RelativLayout, darin ein LinearLayout das immer alignParentBottom ist.
Wie auch immer, hier ist mal der Quelltext
http://dl.dropbox.com/u/53574637/adresseingabe.xml

Für alle die sich meine Tortur ersparen wollen :wink:
Auch wenn das der Weg ist auf dem man am meisten lernt

Vielen Dank an alle Helfenden für Input und Ratschläge, ich geh jetzt erstmal eine Rauchen :P

edit:
fast vergessen

...und ich würde niemals nie sagen ;)

tue ich ja auch nicht, ich sage ja sogar
ein
das ist ja "nie" rückwärts :grin:
Aber im ernst, viele Felder im Formular können sicher mal unumgänglich sein oder wie auch immer, dann würde ich mir aber eher überlegen mit Einklapp-Möglichkeiten oder ViewFlipper oder sowas zu arbeiten um das Formular möglichst überschaubar zu halten und die Notwendigkeit für Scrollen zu vermeiden

— geändert am 13.01.2012, 15:12:51

Antworten