2013-06-02 7 views
8

Ich habe plötzlich das Problem, dass Scrollview über den unteren Rand des Bildschirms erstreckt, so dass auch wenn Sie den ganzen Weg nach unten scrollen nicht seinen gesamten Inhalt zeigt. Das XML ist:Scrollview erstreckt sich über Bildschirm unten

<?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> 

Es wird nicht einfacher als das. Sobald Sie den ganzen Weg hinunter gerollt (wie durch die Form des Scrollers angegeben) sollten Sie den unteren weißen Rand sehen, sondern das ist, was es aussieht:

bottom of the scrollview

mit dem Top-Vergleichen:

top of the scrollview

Die Unterseite sollte wie oben aussehen, nur umgekehrt. Das passiert im Emulator, auf realen Geräten und in so ziemlich jeder Android-Version, die ich ausprobiert habe. Ich weiß nicht, was ich falsch mache (wenn überhaupt ...).

Bitte keine Vermutungen und keine Aufnahmen aus der Hüfte! Nur getestete Antworten. Ich verschwende genug Zeit damit schon so wie es ist. Vielen Dank.

Antwort

0

versuchen Sie, eine Polsterung auf den unteren Rand der Bildlaufansicht, so dass Sie eine weiße Linie an der Unterseite sehen - Ihre Ansicht tatsächlich Scrollen ganz nach unten, ich habe es mit diesem Code versucht und das Ergebnis ist dies:

ich wurde schließlich von diesem other SO thread auf dem richtigen Weg
<?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

Einmal kann in der Tat versuchen, Spiele so zu spielen, aber es ist ein Hack, nicht um eine echte Lösung. – olefevre

+0

PS: Weiß unten zu sehen ist kein Selbstzweck! Da auf allen Seiten des LinearLayout ein Rand vorhanden ist, ist der untere Rand das Zeichen dafür, dass Sie wirklich den Boden erreicht haben. das ist alles. – olefevre

7

nach viel Zeit in toten Gassen verschwenden: die Frage war die Layout-Marge auf dem Linearlayout. Anscheinend mag ScrollView das nicht, genauso wie es sein Kind nicht zentriert (ein Problem, das von vielen anderen Leuten markiert wird, aber nicht mein Problem hier) und wer weiß was noch. Sehr wählerisches Widget. Es sind solche Probleme, die mich dazu bringen, mein Engagement für Android zu überdenken: Es ist im Vergleich zu alternativen Plattformen zu zeitaufwendig und selbst wenn Sie die Herausforderung mögen, ist Zeit Geld.

Wie auch immer, zum Vorteil derer, die hier später floppen werden, ist hier eine Seite-an-Seite-Demonstration eines gebrochenen Layouts (eine einfachere Version des obigen) links und eines funktionierenden auf der rechten Seite. Der Trick besteht darin, den verbotenen Rand mit dem Auffüllen eines zusätzlichen Containers zu emulieren.

<?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

versuchen Sie einfach das Linearlayout setzt in einem anderen einen So:

<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> 
Verwandte Themen