JavascriptProva

lunedì 15 febbraio 2016

Impostazioni perché la ScrollView occupi tutta l'area del display

Importanti acquisizioni con la ScrollView, che metto qui come appunti utili per eventuali futuri ripassi.

Per prima cosa, non riuscivo a mettere un RelativeLayout contenuto in una ScrollView che mi riempisse tutto lo schermo.
Ripercorro le tappe.
Il codice iniziale era questo:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:id="@+id/scrollView" >

    <RelativeLayout 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.laboratorio1322016.MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="200dp"
        android:id="@+id/textView1"
        android:text="fanculo" />
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="300dp"
        android:id="@+id/textView2"
        android:text="@string/hello_world" />
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="700dp"
        android:id="@+id/textView3"
        android:text="Ciao, ciccio bello!" />

</RelativeLayout>
</ScrollView> 
...e il risultato è questo:



Provo a mettere nel codice di ScrollView android:fillViewport=true":
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:fillViewport="true"
    android:id="@+id/scrollView" >

    <RelativeLayout 
    android:id="@+id/mainLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@color/celeste"
    tools:context="com.example.laboratorio1322016.MainActivity" >

    <TextView
        android:background="@color/nero"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:layout_alignParentTop="true"
        android:layout_marginTop="0dp"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="0dp"
        android:id="@+id/textView1"
        android:text="fanculo" />
    
    <TextView
        android:background="@color/nero"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:layout_alignParentTop="true"
        android:layout_marginTop="0dp"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="200dp"
        android:id="@+id/textView2"
        android:text="@string/hello_world" />
    
    <TextView
        android:background="@color/nero"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:layout_alignParentTop="true"
        android:layout_marginTop="0dp"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="400dp"
        android:id="@+id/textView3"
        android:text="Ciao, ciccio bello!" />

</RelativeLayout>
</ScrollView>


...e proviamo il risultato:


Ma modificando l'altezza della ScrollView, le cose cambiano.
Cambio da match_parent a wrap_content:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:fillViewport="true"
    android:id="@+id/scrollView" >

    <RelativeLayout 
    android:id="@+id/mainLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@color/celeste"
    tools:context="com.example.laboratorio1322016.MainActivity" >

    <TextView
        android:background="@color/nero"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:layout_alignParentTop="true"
        android:layout_marginTop="0dp"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="0dp"
        android:id="@+id/textView1"
        android:text="fanculo" />
    
    <TextView
        android:background="@color/nero"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:layout_alignParentTop="true"
        android:layout_marginTop="0dp"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="200dp"
        android:id="@+id/textView2"
        android:text="@string/hello_world" />
    
    <TextView
        android:background="@color/nero"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:layout_alignParentTop="true"
        android:layout_marginTop="0dp"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="400dp"
        android:id="@+id/textView3"
        android:text="Ciao, ciccio bello!" />

</RelativeLayout>
</ScrollView> 
e il risultato torna:



Quindi impostare android:fillViewport="true" non è sufficiente: l'altezza della ScrollView deve essere impostata anche a android:layout_height="match_parent".
Invece l'altezza del RelativeLayout figlio della ScrollView può essere impostata sia a match_parent sia a wrap_content, senza che il risultato cambi.
Provo anche a settare l'altezza del RelativeLayout a un valore determinato:
<RelativeLayout 
    android:id="@+id/mainLayout"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@color/celeste"
    tools:context="com.example.laboratorio1322016.MainActivity" > 
e il risultato è sempre quello:



...Okay!

Nessun commento:

Posta un commento