2010-01-09 6 views
29

Ich hatte eine Reihe von Problemen mit ScrollViews. Vor kurzem habe ich versucht, eine LinearView zu erstellen, deren Inhalt die Bildschirmgröße überschreitet, also habe ich das neue Layout mit dem Elternelement ScrollView erstellt und seine Breite und Höhe auf benutzerdefinierte Werte gesetzt (das Layout muss als Dialog erscheinen - nicht den gesamten Bildschirm ausfüllen).Android: ScrollView Problem

Wenn das Element ausgewählt ist, scheint der rote Rahmen das Rechteck der vordefinierten ScrollView LayoutWidth und LayoutHeight zu umfassen, was OK ist. Dann platzierte ich die LinearView und setzte die Werte LayoutWidth und LayoutHeight auf fill_parent.

Als ich dann anfing, die Elemente in das LinearLayout einzufügen, umhüllte der Rahmen (red lile) die eingefügten Elemente, nicht die gesamte Parent ScrollView.

Wenn also der Inhalt des LinearLayout (untergeordneten von ScrollView) die Größe der übergeordneten ScrollView überschritten, wurde der Bildlauf nicht angezeigt und die unteren Elemente sind einfach unsichtbar.

Wie auch immer .. in diesem Fall war der XML-Inhalt zu umfangreich, um die Frage hier zu stellen und jetzt habe ich das gleiche Problem mit dem einfacheren Beispiel.

Der folgende Teil des Layouts ist als scrollbarer EditText gedacht (falls die Benutzereingabe die primäre Größe des Widgets überschreitet). Ich wollte die EditText-Höhe auf 120px setzen, also setze ich die Eltern-ScrollView-Höhe auf 120px und den Kind-EditText auf fill_parent. Auch in diesem Fall hat der EditText nicht den ganzen Scrollbereich füllen, sondern nur eine einzige Zeile:

<ScrollView android:layout_height="120px" android:layout_width="fill_parent"> 
<EditText android:id="@+id/txtContent" android:layout_height="fill_parent" android:layout_width="fill_parent" android:text="TestContent"> 
</EditText> 
</ScrollView> 

Wer weiß, wie der Inhalt oben neu zu gestalten, so dass die EditText die Kontrolleltern füllen und bei der Eingabe des Benutzers überschreitet die Kontrollgröße die Schriftrolle erscheint?

Vielen Dank!

Edit:

Im Folgenden sind die Screenshots des Layouts

entfernt tot Images Link
entfernt tot Images Link

Antwort

95

Ihre EditText eine Höhe von wrap_content haben sollte. fill_parent hat keine Bedeutung in einer ScrollView. Wenn Sie möchten, dass der EditText Ihren ScrollView füllt, wenn sein Inhalt kleiner ist als der ScrollView, verwenden Sie android:fillViewport="true" auf dem ScrollView.

+0

Aber mit 'ScrollView' mit' android: fillViewport = "true" 'schafft ein seltsamen Probleme für mich. Im Fragment befindet sich ein Scrollview und darin befindet sich ein Tabellenlayout mit dynamisch erzeugten Tabellenzeilen zur Laufzeit. Danach, wenn das Werbebanner geladen wird und ich mache, ist es sichtbar, so dass aufgrund der Verschiebung der Fragmentgröße meine untergeordneten Tabellenzeilen verschwinden. Dies ist nicht passiert, wenn ich fillViewPort auf false gesetzt habe! –

9

Ja, wie Romain sagte, scrollview benötigt folgende Kombination.

  1. für Scroll android:fillViewport="true"
  2. für ein Kind Scroll android:layout_height="wrap_content"
+1

Ja. Es gab Fälle, in denen ich seltsames Verhalten hatte, als ich es auf fill_parent setzte. –

+0

Ich habe das gleiche gemacht, aber dann kann ich nicht scrollen? Kannst du mir helfen zu verstehen, was das Problem sein könnte? –