2013-06-02 18 views
8

Ho improvvisamente il problema che ScrollView si estende oltre la parte inferiore dello schermo in modo che anche se si scorre fino in fondo non mostra tutto il suo contenuto. Il codice XML è:Scrollview estende oltre la parte inferiore dello schermo

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

Non è più semplice di così. Una volta che avete scorrere fino in fondo (come indicato dalla forma dello scroller) si dovrebbe vedere il margine bianco di fondo, ma invece questo è ciò che sembra:

bottom of the scrollview

Confronta con la parte superiore:

top of the scrollview

La parte inferiore dovrebbe apparire come la parte superiore, solo invertita. Questo accade nell'emulatore, su dispositivi reali e praticamente in ogni versione di Android che ho provato. Sono in perdita su ciò che sto facendo male (se non altro ...).

Si prega di non supporre e di non sparare dal fianco! Solo risposte testate. Ho già perso abbastanza tempo su questo già così com'è. Grazie.

risposta

0

prova a mettere una spaziatura nella parte inferiore della vista di scorrimento, in modo da vedere una linea bianca in basso - la tua vista invero scorre fino in fondo, l'ho provata con questo codice e il risultato è questo:

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

volta può infatti provare a giocare i giochi del genere, ma è un hack, non una vera soluzione. – olefevre

+0

PS: vedere del bianco in basso non è fine a se stesso! Dato che c'è un margine su tutti i lati del LinearLayout, vedere il margine inferiore è il segno che hai veramente raggiunto il fondo; È tutto. – olefevre

7

Dopo perdere molto tempo nei vicoli morti mi hanno finalmente messo sulla strada giusta per questo other SO thread: la questione è stato il margine di layout sul LinearLayout. A quanto pare a ScrollView non piace, proprio come non piace che il suo bambino sia centrato (un problema segnalato da molte altre persone ma non è un mio problema qui) e chissà cos'altro. Widget molto esigente. Sono problemi come questo che mi fanno riconsiderare il mio impegno per Android: è troppo dispendioso in termini di tempo rispetto alle piattaforme alternative e, anche se ti piace la sfida, il tempo è denaro.

In ogni caso, per il beneficio di coloro che si faranno flop qui più avanti, ecco una dimostrazione affiancata di un layout non funzionante (una versione più semplice di quella sopra) a sinistra e una di lavoro a destra. Il trucco è quello di emulare il margine verboten con padding su un contenitore extra.

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

Basta provare mettendo il LinearLayout all'interno di un altro Ti piace questa:

<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> 
Problemi correlati