2010-06-27 22 views
29

El problema que estoy teniendo parece ser que si tengo una vista (por ejemplo, myButton) dentro de un RelativeLayout configurado para alinear ParentBottom - (según el código a continuación) y luego envuelvo el RelativeLayout con una vista de desplazamiento (necesario para que el contenido visible en pantallas más pequeñas o cuando la orientación cambia a horizontal) - entonces, cuando la parte inferior de los padres no está visible (por ejemplo, cuando se cambia a orientación horizontal) myButton se muestra en la parte superior de la página, NO en la parte inferior.Android RelativeLayout: cómo alinearParentBottom cuando se envuelve en un ScrollView?

¿Cómo se puede alinear una vista en la parte inferior de la pantalla y mantenerla en la parte inferior aunque la parte inferior esté debajo del desplazamiento?

<ScrollView 
android:id="@+id/mainScrollView" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:fillViewport="true"> 



<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/topLayout" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 



... lots of views and stuff 


<Button android:layout_alignParentBottom="true" 
android:id="@+id/myButton" 
android:text="Click Me" /> 

</RelativeLayout> 
</ScrollView> 
+0

sabes cómo hacer esto hoy? –

Respuesta

6

Usar fill_parent como la altura de un niño de ScrollView no tiene sentido. Le está diciendo a RelativeLayout que siempre sea tan alto como su padre. En este caso, ScrollView se vuelve inútil! La altura de RelativeLayout debe establecerse en wrap_content, en cuyo caso, dependiendo de lo que contenga RelativeLayout, alignParentBottom puede no funcionar como usted espera. Simplemente debes usar LinearLayout, será mucho más simple.

+0

Bueno, no entiendo por qué dices que scrollview se vuelve inútil, su función es permitir el desplazamiento, y lo hace ... así que tengo que usarlo. Tengo que usar RelativeLayout para poder usar android_alignParentBottom. No veo cómo usar LinearLayout resolvería esto porque entonces no puedo alinear myButton en la parte inferior de la pantalla. ¿No es posible alinear una vista en la parte inferior de la pantalla y admitir el desplazamiento al mismo tiempo? – JohnRock

+0

Es inútil si el niño tiene height = fill_parent. fill_parent significa "Quiero ser tan alto como mi padre". Entonces, si el contenido de ScrollView es tan grande como ScrollView, no se desplazará. –

+0

Ok. Aprecio tu guía. Sin embargo, el diseño sí se desplaza, ese no es el problema que trato de resolver. – JohnRock

3

así que podría probar esto

<LinearLayout android:id="@+id/parentLayout" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <ScrollView android:id="@+id/mainScrollView" 
     android:layout_width="fill_parent" android:layout_height="fill_parent" 
     android:layout_weight="1" xmlns:android="http://schemas.android.com/apk/res/android" 
     android:fillViewport="true"> 



     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/topLayout" android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 



      ... lots of views and stuff 


      <Button android:layout_alignParentBottom="true" android:id="@+id/myButton" 
       android:text="Click Me" /> 

     </RelativeLayout> 
    </ScrollView> 
</LinearLayout> 
+0

gracias a su trabajo para mí –

+0

Gracias amigo! Me enfrenté al mismo problema y comencé a pensar que es imposible. Su solución me ayuda mucho – Androider

24

Tome el botón del ScrollView, Envolver tanto el ScrollView y el botón en una disposición lineal, ajuste la altura de la ScrollView a 0dip y establecer su peso a 1, no establezca ninguna propiedad de peso para el botón, por lo que la vista de desplazamiento puede ocupar todo el espacio restante, lo que solo guarda el espacio del botón en la parte inferior.

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

    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1"> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" > 

     ....lots of views... 


     </LinearLayout> 
    </ScrollView> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="match_parent" 
     android:layout_height="40dp" 
     android:text="Button" /> 

</LinearLayout> 
+7

Pero esto haría que el 'Botón' siempre permanezca en la parte inferior de la pantalla incluso cuando' ScrollView' es desplazable, ¿verdad? –

+0

Sí, sería: D – kunmi

+0

Esta es una solución que me gusta, pero ten cuidado con que el "peso" es malo para el rendimiento – superuser

-1

Es un poco tarde, pero la solución más simple es añadir

android:below="@id/lots_of_stuffs" 

De esta manera:

<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mainScrollView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:fillViewport="true"> 

    <RelativeLayout 
    android:id="@+id/topLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 


    <LinearLayout 
     android:id="@+id/lots_of_stuffs" > 

     ... lots of views and stuff 

    </LinearLayout> 

    <Button android:layout_alignParentBottom="true" 
     android:id="@+id/myButton" 
     android:text="Click Me" 
     android:below="@id/lots_of_stuffs" /> <!-- Here is the "hack" --> 

    </RelativeLayout> 
</ScrollView> 
+0

un poco tarde y todavía no es una solución adecuada, esto estirará el botón a su altura de relleno. – Shivansh

Cuestiones relacionadas