2013-06-02 13 views
8

Nagle mam problem z tym, że Scrollview rozciąga się poza dolną część ekranu, więc nawet jeśli przewiniesz do końca, nie pokazuje on całej zawartości. Kod XML to:Scrollview rozciąga się poza dolną krawędź ekranu

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#FFFFFFFF"> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="15dp" 
     android:background="#FFBBBBBB" 
     android:orientation="vertical" > 
     <View 
      android:layout_width="100dp" 
      android:layout_height="300dp" 
      android:layout_margin="15dp" 
      android:layout_gravity="center_horizontal" 
      android:background="#FFDDDDFF"/> 
     <View 
      android:layout_width="100dp" 
      android:layout_height="300dp" 
      android:layout_margin="15dp" 
      android:layout_gravity="center_horizontal" 
      android:background="#FFDDDDFF"/> 
    </LinearLayout> 
</ScrollView> 

Nie ma nic prostszego. Kiedy już przewijane w dół (jak wskazano kształtu zmieniacza) powinieneś zobaczyć dolny biały margines, ale zamiast tego jest, jak to wygląda:

bottom of the scrollview

Porównaj z góry:

top of the scrollview

Dno powinno wyglądać jak górne, tylko odwrócone. Dzieje się tak w emulatorze, na prawdziwych urządzeniach iw prawie każdej wersji Androida, którą wypróbowałem. Brakuje mi tego, co robię źle (jeśli cokolwiek ...).

Proszę nie zgadywać ani strzelać z biodra! Tylko sprawdzone odpowiedzi. Zmarnowałem już wystarczająco czasu na to, jak jest. Dzięki.

Odpowiedz

0

spróbuj umieścić dopełnienie u dołu widoku przewijania, tak aby na dole zobaczył białą linię - Twój widok rzeczywiście przewija się do końca, próbowałem go z tym kodem, a wynik jest następujący:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 

    android:background="#FFFFFFFF" 
    android:padding="5dp" > 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="15dp" 
    android:background="#FFBBBBBB" 
    android:orientation="vertical" > 

    <View 
     android:layout_width="100dp" 
     android:layout_height="1500dp" 
     android:layout_gravity="center_horizontal" 
     android:layout_margin="15dp" 
     android:background="#FFDDDDFF" /> 

    <View 
     android:layout_width="100dp" 
     android:layout_height="300dp" 
     android:layout_gravity="center_horizontal" 
     android:layout_margin="15dp" 
     android:background="#FFDDDDFF" /> 

    <View 
     android:layout_width="100dp" 
     android:layout_height="10dp" 
     android:layout_gravity="center_horizontal" 
     android:layout_margin="15dp" 
     android:background="#FF00FF00" /> 
</LinearLayout> 

enter image description here

+0

Raz rzeczywiście może próbować grać w gry takie jak to, ale jest to hack, a nie prawdziwe rozwiązanie. – olefevre

+0

PS: Widzenie bieli na dole nie jest celem samym w sobie! Ponieważ na wszystkich stronach LinearLayout znajduje się margines, widząc dolny margines jest oznaką, że naprawdę osiągnąłeś dno; to wszystko. – olefevre

7

Po tracić dużo czasu w martwych alejek I wreszcie umieścić na dobrej drodze przez ten other SO thread: problem był margines układ na LinearLayout. Wygląda na to, że ScrollView tego nie lubi, podobnie jak nie lubi, gdy jego dziecko jest wyśrodkowane (problem sygnalizowany przez wiele innych osób, ale nie mój problem tutaj) i kto wie, co jeszcze. Bardzo wybredny widget. Takie problemy sprawiają, że ponownie zastanawiam się nad moim zaangażowaniem w Androida: jest to po prostu zbyt czasochłonne w stosunku do alternatywnych platform, a nawet jeśli podoba ci się to wyzwanie, czas to pieniądz.

W każdym razie, na korzyść tych, którzy będą tu flopować później, tutaj jest pokazanie na boku zepsutego układu (prostsza wersja powyższego) po lewej stronie i działającego po prawej. Sztuką jest naśladowanie marginesu verboten z dopełnieniem na dodatkowym kontenerze.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#00FFFF" 
    android:orientation="horizontal" 
    android:baselineAligned="false"> 
    <ScrollView   
     android:layout_width="0dp" 
     android:layout_weight="1"  
     android:layout_height="match_parent" 
     android:background="#FFFFFFFF"> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_margin="15dp" 
      android:background="#FFBBBB22" 
      android:orientation="vertical"> 
      <View 
       android:layout_width="100dp" 
       android:layout_height="1000dp" 
       android:layout_margin="15dp" 
       android:layout_gravity="center_horizontal" 
       android:background="#FFDDDDFF"/> 
     </LinearLayout> 
    </ScrollView> 
    <View 
     android:layout_width="1dp" 
     android:layout_height="match_parent" 
     android:background="#FF000000"/> 
    <ScrolllView 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="match_parent" 
     android:background="#FFFFFFFF"> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:padding="15dp" 
      android:background="#FFFFFF" 
      android:orientation="vertical"> 
      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="#FFBBBB22" 
       android:orientation="vertical"> 
       <View 
        android:layout_width="100dp" 
        android:layout_height="1000dp" 
        android:layout_margin="15dp" 
        android:layout_gravity="center_horizontal" 
        android:background="#FFDDDDFF"/> 
      </LinearLayout> 
     </LinearLayout> 
    </ScrollView> 
</LinearLayout> 
0

Spróbuj oddanie LinearLayout wewnątrz innego tak:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#FFFFFFFF"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_margin="15dp" 
      android:background="#FFBBBBBB" 
      android:orientation="vertical"> 

      <View 
       android:layout_width="100dp" 
       android:layout_height="300dp" 
       android:layout_gravity="center_horizontal" 
       android:layout_margin="15dp" 
       android:background="#FFDDDDFF" /> 

      <View 
       android:layout_width="100dp" 
       android:layout_height="300dp" 
       android:layout_gravity="center_horizontal" 
       android:layout_margin="15dp" 
       android:background="#FFDDDDFF" /> 
     </LinearLayout> 
    </LinearLayout> 
</ScrollView> 
Powiązane problemy