2012-05-29 12 views
8

Problema: ScrollView oculta la parte superior de su vista secundaria cuando crece más allá de cierta altura.ScrollView no muestra la parte superior

He siguiente distribución definido en 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> 

---------- ------ código

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()); 
    } 
} 

Aquí filas superiores en LinearLayout (ScrollView de inmediato niño) comienza a desaparecer de la parte superior si no. de filas crece más de 15! Además, ni siquiera puedo desplazarme hacia arriba manualmente para verlos. Cualquier puntero, por favor, ¿qué hay de malo en este diseño?

+0

¿Podría ser que establezca paddingBottom en ScrolView? intente y elimínelo, vea lo que sucede. –

+0

@eric - no hace ninguna diferencia. – iuq

Respuesta

28

bien, he resuelto mediante la eliminación siguiente línea de LinearLayout (hijo inmediato de ScrollView)

android:layout_gravity="center" 

ScrollView funciona perfectamente ahora. Gracias a todos por las sugerencias.

0

Quitaría el segundo nodo RelativeLayout, pero guarde el ScrollView. Luego, para el ScrollView, agregaría layout_alignParentTop=true y layout_above="@+id/commandPanel". El segundo RelativeLayout parece redundante y normalmente cuando agrega hijos a un RelativeLayout deben usar las opciones de diseño del contenedor, es decir, layout_above, debajo, alinear, etc.

0

Parece que su relleno es un problema , intente eliminarlo primero.

+0

eliminar el relleno no resolvió el problema, ya sea – iuq

0

jus escribir xml con el cambio 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

y estoy probando en Moto Quench (OS 2.1) y probé su sugerencia, pero fue en vano. – iuq

Cuestiones relacionadas