2010-09-09 10 views
8

alt text
Jak zwiększyć wysokość przewijania w systemie Android?

Hi przyjaciele,

używam GridView wewnątrz ScrollView do wyświetlania obrazów. W GridView mam 16 obrazów, które zostały dynamicznie dodane, ale ScrollView nie wyświetla wszystkich 16 obrazów (patrz zrzut ekranu).

Chcę, aby ScrollView wyświetlał cały GridView, czy ktoś wie, jak mogę to naprawić?

Dzięki wszystkim.

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

Odpowiedz

32

Zastosowanie android:fillViewport="true" atrybut w układzie XML lub użyć metody setFillViewport(true) w kodzie Java.

Zapraszamy do obejrzenia: ScrollView documentation

+0

Dziękujemy! Ten problem zabrał mi nieprzyjemne godziny :) –

+1

żadne z nich nie działa ... – bubakazouba

0

Jeśli dolna część layout & górnej części masy układu są 0, a następnie ustawić poglądy przewijania 1 i używać layout_height="match_parent".

0

Według mnie nie ma potrzeby dodawania widoku przewijania w widoku siatki. W systemie Android automatycznie doda widok przewijania, jeśli zajdzie taka potrzeba.

3

Nie powinieneś dodawać GridView do ScrollView. Proszę zapoznać się z GridView API w celu zrozumienia GridView.

Zgodnie z definicją GridView wyświetla elementy w dwuwymiarowej przewijanej siatce. Dlatego jeśli dodasz przewijany komponent wewnątrz ScrollView, zachowanie nie będzie zgodne z oczekiwaniami. Ponieważ nie możemy dodać ListView do ScrollView, nie możemy i nie powinniśmy dodawać GridView do ScrollView.

4

Miałem podobny problem, gdy miałem przeglądarkę pod stałym paskiem nawigacyjnym na AbsoluteLayout.

Ustawię wysokość przewijania na wysokość mojego ekranu pomniejszoną o wysokość paska nawigacyjnego. Mój ekran miał wysokość 480dp, a navbar był wysoki 47dp, więc ustawiłem wysokość przewijania na 433dp w układzie xml i przesunąłem górną część widoku poniżej pod navbar używając przesunięcia 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" > 

Dodaj następujące importu:

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

Teraz, aby pracować na wielu ekranach dodałem to do onCreate za aktywność:

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

Z pomocą tej funkcji pomocnika aby uzyskać wysokość ekranu:

//---------------------------------------------------------------------------------------------- 
// 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(); 
} 
Powiązane problemy