2010-10-07 12 views
19

Pregunta Si tengo el siguiente:altura mínima fill_parent y altura wrap_content en ScrollView? (O simplemente el código del diseño de redacción aplicación de correo electrónico)

<ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent"> 
    <LinearLayout android:layout_width="fill_parent" android:layout_height="?" android:orientation="vertical"> 
     <EditText android:layout_width="fill_parent" android:layout_height="?" android:hint="Subject" android:id="@+id/subject" /> 
     <EditText android:layout_width="fill_parent" android:layout_height="?" android:id="@+id/body" /> 
    </LinearLayout> 
</ScrollView> 

¿Cómo puedo obtener el cuerpo (segunda EditarTexto) para llenar el resto de la pantalla, pero todavía tienen la scrollview kick cuando el contenido del cuerpo es demasiado largo? Como un height="wrap_content" y minHeight="fill_parent"

layout_height="fill_parent" parece no hacer nada si los coloca en una ScrollView

Un ejemplo práctico de lo que quiero es la aplicación de correo electrónico componer ventana

probé este y los elementos EditText actúan como si fueran wrap_content y no se llenan. Sólo desplazamiento si escribe lo suficientemente

<ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent"> 
    <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> 
     <EditText android:layout_width="fill_parent" android:layout_height="fill_parent" layout_weight="1" android:hint="Subject" android:id="@+id/subject" /> 
     <EditText android:layout_width="fill_parent" android:layout_height="fill_parent" layout_weight="1" android:id="@+id/body" /> 
    </LinearLayout> 
</ScrollView> 

Respuesta

53

Me encontré con un enlace al mail app source code en my accepted answer on another question. ¡La respuesta es simple! Agregue android:fillViewport="true" al <ScrollView...> y agregue android:layout_weight="1.0" a la vista que desea ocupar todo el espacio disponible. Explicado en este blogspot

+5

Solo para aquellos que se encuentran con esto, no olviden que necesita especifique el peso como lo hice arriba. –

+0

Romain Guy explica esta técnica en una publicación de blog: http://www.curious-creature.org/2010/08/15/scrollviews-handy-trick/ – caw

+1

@MarcoW. ¿Cómo harías que scrollview le deje a su hijo todo el espacio que necesita, pero deja que la vista de desplazamiento tenga una altura máxima? por ejemplo: la altura máxima es 100dp. si el niño necesita menos que eso, tanto el niño como scrollView tienen su altura a este valor (que es menos de 100dp).si el niño necesita 100dp o más, ambos tendrán la altura de 100dp. –

0

¿Por qué no hacer el ScrollView siendo fill_parent y A y B a wrap_content? Lo único que desea es que su ScrollView se ajuste a la pantalla.

+0

I también quieren textarea B para llenar la pantalla. Como una altura mínima: fill_parent. –

+0

Pruebe con LinearLayout y layout_weight = "1" en cada A y B con layout_height = "fill_parent" en A y B también – fedj

+0

Vea mi ejemplo de código anterior –

0

después de llamar
AlertDialog dialog = builder.show();

luego llame al
fixScrollViewHeight (scrollView);

private void fixScrollViewHeight (ScrollView scrollView) {
int screenHeight = activity.getWindowManager(). GetDefaultDisplay(). GetHeight();
LayoutParams lp = scrollView.getLayoutParams();
lp.height = screenHeight/3;
scrollView.setLayoutParams (lp);
}

5

como se mencionó anteriormente el camino correcto es utilizar el androide: = fillViewport "verdadero" atributo.

No es un ejemplo, donde el Vill imagen puede colocar una el y de ScrollView:

<ScrollView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:fillViewport="true"> 
    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:fillViewport="true" 
     android:orientation="vertical"> 

     <LinearLayout 
     android:layout_height="fill_parent" 
     android:layout_width="wrap_content" 
     android:orientation="vertical" 
     android:layout_weight="1"> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="test"/> 
     </LinearLayout> 


     <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:background="@color/red"> 
     <ImageView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:adjustViewBounds="true" 
      android:src="@drawable/about_us_image_1_land" 
      style="@style/layout_marginTop20"/> 
     </LinearLayout> 
    </LinearLayout> 
    </ScrollView> 
+1

En lugar de fill_parent realmente deberías usar match_parent. +1 para el ejemplo! – Nathan

Cuestiones relacionadas