2010-09-09 23 views
8

alt text
¿Cómo aumentar la altura de ScrollView en Android?

Hola amigos,

que estoy usando GridView dentro de un ScrollView para la visualización de imágenes. En GridView tengo 16 imágenes que se agregaron dinámicamente, pero ScrollView no muestra las 16 imágenes (ver captura de pantalla).

Quiero que ScrollView muestre todo GridView, ¿alguien sabe cómo puedo arreglar esto?

Gracias todos.

archivo xml:

<?xml version="1.0" encoding="utf-8"?> 
<merge android:layout_width="wrap_content" android:layout_height="340dip" xmlns:android="http://schemas.android.com/apk/res/android"> 
<LinearLayout android:id="@+id/LinearLayout01" 
android:layout_width="fill_parent" 
android:layout_height="320dip" android:orientation="vertical" 
android:background="@color/black"> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/scrollview" 
      android:layout_width="fill_parent" 
      android:layout_height="500dip" 
      android:background="#ffffff" 
      android:paddingTop="10dip" 
      android:paddingLeft="5dip" 
      android:layout_weight="1"> 

<GridView 
        android:id="@+id/jr_lookbook_grid" android:layout_width="fill_parent" 
        android:layout_height="fill_parent" android:numColumns="4" 
        android:verticalSpacing="10dp" android:horizontalSpacing="10dp" 
        android:columnWidth="90dp" android:stretchMode="columnWidth" 
        android:adjustViewBounds="true" 
        android:background="@drawable/shape"  

        android:gravity="center" android:layout_weight="1"/> 
</ScrollView> 

        <Button android:id="@+id/click" 
        android:background="@android:color/transparent" 
        android:text="Load More Pictures..." 

        android:textColor="@color/white" 
        android:layout_width="fill_parent" android:layout_height="wrap_content" 
        android:layout_centerVertical="true" /> 

</LinearLayout> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/LinearLayout02_img" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:layout_gravity="center" 
    android:layout_alignParentBottom="true" 
    android:background="@color/black" 
       android:layout_alignParentLeft="true"> 

    <WebView 
     android:id="@+id/webview" 

     android:layout_width="fill_parent" 

     android:layout_height="fill_parent"   
     android:scrollbars="none" 

    /> 
    <ImageView android:id="@+id/ImageView01" 
    android:layout_gravity="center_horizontal" 
    android:scaleType="centerInside" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 

    android:adjustViewBounds="true"> 
</ImageView> 

    </LinearLayout> 
    <LinearLayout android:id="@+id/LinearLayout02"  android:background="#AA000000" 
     android:layout_width="400px" 
     android:layout_height="50dip" 
     android:layout_gravity="bottom"  
      > 
          <Button 
       android:id="@+id/back" 

       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/back1" 
       android:layout_alignParentRight="true" 
       android:layout_marginLeft="10dip" 

       /> 

       <Button 
        android:background="@drawable/forward5" 
       android:id="@+id/next" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:gravity="center" 
       android:layout_alignParentRight="true" 
       android:layout_marginLeft="215dip" 

       /> 
</LinearLayout> 

</merge> 

Respuesta

32

Uso atributo android:fillViewport="true" en el diseño de XML o el uso del método setFillViewport(true) en código Java.

Tenga una mirada en: ScrollView documentation

+0

¡Gracias! Este problema me llevó algunas horas desagradables :) –

+1

tampoco están funcionando ... – bubakazouba

0

Si la parte inferior de la parte superior de la disposición de peso layout & son 0, a continuación, establecer los puntos de vista de desplazamiento para 1 y utilizar layout_height="match_parent".

0

Según mi opinión, no es necesario agregar la vista de desplazamiento para la Vista de cuadrícula. En Android, agregará la vista de desplazamiento automáticamente, si hay alguna necesidad.

3

No debe agregar GridView en ScrollView. Consulte el GridView API para comprender GridView.

Según la definición, GridView muestra los elementos en una cuadrícula desplazable bidimensional. Por lo tanto, si agrega un componente desplazable dentro de ScrollView, el comportamiento no sería el esperado. Como no podemos agregar ListView dentro de ScrollView, no podemos y no debemos agregar GridView dentro de ScrollView.

4

Tuve un problema similar cuando tenía una vista de desplazamiento debajo de una barra de navegación fija en un AbsoluteLayout.

Configuré la altura de la vista de desplazamiento a la altura de la pantalla menos la altura de la barra de navegación. Mi pantalla tenía 480dp de alto y la barra de navegación tenía 47dp de alto, así que configuré la altura de la vista de desplazamiento en 433dp en el diseño xml y moví la parte superior de la vista de desplazamiento debajo de la barra de navegación con un desplazamiento en Y.

<ScrollView 
    android:id="@+id/scroll_view" 
    android:layout_width="fill_parent" 
    android:layout_height="433dp" 
    android:layout_x="0dp" 
    android:layout_y="50dp" 
    android:fillViewport="true" > 

Añadir las siguientes importaciones:

import android.content.Context; 
import android.view.WindowManager; 
import android.widget.ScrollView; 
import android.view.Display; 

ahora para hacer que funcione para múltiples pantallas he añadido esto a onCreate para la actividad:

ScrollView myScrollView = (ScrollView) findViewById(R.id.scroll_view); 
    myScrollView.getLayoutParams().height = ((int) ScHgt(this)-47); 

Con la ayuda de esta función auxiliar para obtener la altura de la pantalla:

//---------------------------------------------------------------------------------------------- 
// public static double ScHgt(Context context) 
//---------------------------------------------------------------------------------------------- 
    //return the screen height of the device 
public static double ScHgt(Context context) 
{ 
    WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    Display display = windowManager.getDefaultDisplay(); 
    return display.getHeight(); 
} 
Cuestiones relacionadas