2012-05-29 14 views
8

Problem: ScrollView ukrywa górną część swojego widoku podrzędnego, gdy rośnie powyżej pewnej wysokości.ScrollView nie pokazuje górnej części

Mam następujący układ zdefiniowany w XML

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <LinearLayout 
     android:id="@+id/commandPanel" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:paddingLeft="5dip" 
     android:paddingRight="5dip" > 

     <Button 
      android:id="@+id/button1" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="OK" /> 

     <Button 
      android:id="@+id/button2" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="Back" /> 
    </LinearLayout> 

    <RelativeLayout 
     android:id="@+id/mainContentPanel" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_above="@id/commandPanel" 
     android:background="@android:color/white" > 

     <ScrollView 
      android:id="@+id/formScrollView" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_gravity="center" 
      android:layout_marginTop="5dip" 
      android:layout_weight="1" 
      android:background="@android:color/darker_gray" 
      android:fillViewport="false" 
      android:paddingBottom="5dip" 
      android:scrollbarStyle="insideOverlay" > 

      <LinearLayout 
       android:id="@+id/formContentLayout" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_gravity="center" 
       android:layout_marginTop="20dip" 
       android:background="@android:color/black" 
       android:gravity="center_horizontal|top" 
       android:orientation="vertical" 
       android:paddingLeft="5dip" 
       android:paddingRight="5dip" 
       android:paddingTop="20dip" > 

       <LinearLayout 
        android:id="@+id/tr" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="10dip" 
        android:orientation="horizontal" > 

        <TextView 
         android:id="@+id/title" 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content" 
         android:layout_weight="1" 
         android:text="sample title" /> 

        <TextView 
         android:id="@+id/value" 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content" 
         android:layout_weight="1" 
         android:text="sample value ......." /> 
       </LinearLayout> 
      </LinearLayout> 
     </ScrollView> 
    </RelativeLayout> 

</RelativeLayout> 

---------- kod ------

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.scrollview); 
    updateUi(); 
} 

//add few more rows here 
void updateUi() { 
    LinearLayout sampletr = (LinearLayout) findViewById(R.id.tr); 
    LinearLayout contentPane = (LinearLayout) findViewById(R.id.formContentLayout); 
    TextView title = (TextView) findViewById(R.id.title); 
    TextView value = (TextView) findViewById(R.id.value); 
    for (int i = 0; i < 25; i++) { 
     LinearLayout tr = new LinearLayout(this); 
     TextView t = new TextView(this); 
     t.setText("Sample title : " + i); 
     TextView v = new TextView(this); 
     v.setText("Sample value : " + i); 

     tr.addView(t, title.getLayoutParams()); 
     tr.addView(v, value.getLayoutParams()); 
     contentPane.addView(tr, sampletr.getLayoutParams()); 
    } 
} 

Tutaj Ulubione wiersze LinearLayout (Scrollview bezpośrednim dziecko) zaczynają znikać z góry, jeśli nie. rzędów rośnie ponad 15! Ponadto nie mogę nawet przewinąć ręcznie, aby je wyświetlić. Jakikolwiek wskaźnik, proszę, co jest nie tak z tym układem?

+0

Czy możliwe jest ustawienie paddingBottom na ScrolView? spróbuj i usuń to, zobacz, co się stanie. –

+0

@eric - to nie ma znaczenia. – iuq

Odpowiedz

28

ok, mam rozwiązać, usuwając następujący wiersz z LinearLayout (natychmiastowe dziecko Scrollview)

android:layout_gravity="center" 

ScrollView działa teraz idealnie. Dziękuję wszystkim za sugestie.

0

Chciałbym usunąć drugi węzeł RelativeLayout, ale zachować ScrollView. Następnie dla ScrollView dodałbym layout_alignParentTop=true i layout_above="@+id/commandPanel". Drugi RelativeLayout wydaje się zbędny i zwykle podczas dodawania dzieci do RelativeLayout powinni korzystać z opcji układu pojemnika, czyli layout_above poniżej, wyrównanie, itp

0

to wydaje się, że Twój padding-top jest problemem , spróbuj najpierw usunąć.

+0

usunięcie padding nie rozwiązało problemu albo – iuq

0

jus napisać xml ze zmianami lil

<LinearLayout 
    android:id="@+id/commandPanel" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:paddingLeft="5dip" 
    android:paddingRight="5dip" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="OK" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="Back" /> 
</LinearLayout> 

<RelativeLayout 
    android:id="@+id/mainContentPanel" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_above="@id/commandPanel" 
    android:background="@android:color/white" > 

    <ScrollView 
     android:id="@+id/formScrollView" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_gravity="center" 

     android:layout_marginTop="0dp" <--- --- change n remove this margin 

     android:layout_weight="1" 
     android:background="@android:color/darker_gray" 
     android:fillViewport="false" 
     android:paddingBottom="5dip" 
     android:scrollbarStyle="insideOverlay" > 

     <LinearLayout 
      android:id="@+id/formContentLayout" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_gravity="center" 
      android:layout_marginTop="20dip" 
      android:background="@android:color/black" 
      android:gravity="center_horizontal|top" 
      android:orientation="vertical" 
      android:paddingLeft="5dip" 
      android:paddingRight="5dip" 
      android:paddingTop="20dip" > 

      <LinearLayout 
       android:id="@+id/tr" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="10dip" 
       android:orientation="horizontal" > 

       <TextView 
        android:id="@+id/title" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:layout_weight="1" 
        android:text="sample title" /> 

       <TextView 
        android:id="@+id/value" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:layout_weight="1" 
        android:text="sample value ......." /> 
      </LinearLayout> 
     </LinearLayout> 
    </ScrollView> 
</RelativeLayout> 

+0

dobrze testuję na Moto Quench (OS 2.1) i próbowałem twojej sugestii ale bez skutku. – iuq

Powiązane problemy