2010-12-17 21 views
12

Tengo un problema con mi aplicación. Recientemente agregué ScrollView como el padre de LinearLayout. Cuando cambio la orientación de mi dispositivo a Horizontal, mis botones se cortan en la parte superior. Puedo ver el último botón muy bien con un "espacio negro" extra al final cuando me desplazo hacia abajo, solo se corta la parte superior. Miré a mi alrededor y no estoy seguro de por qué sucede esto. Aquí hay algunas fotos para que pueda entender cómo se ve.modo Android Landscape cortando mis botones en la parte superior

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_gravity="center" 
    android:gravity="center_vertical"> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_gravity="center"> 
    <Button 
     android:id="@+id/BeefButton" 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:layout_gravity="center" 
     android:background="@drawable/backgroundlayer" 
     android:drawableLeft="@drawable/beefbutton" 
     android:text="Beef" 
     android:textColor="#FFFFFF" 
     android:textSize="32px" 
     android:textColorHighlight="#FF6600"/> 
    <Button 
     android:id="@+id/PoultryButton" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_width="match_parent" 
     android:background="@drawable/backgroundlayer" 
     android:drawableLeft="@drawable/chickenbutton" 
     android:text="Poultry" 
     android:textColor="#FFFFFF" 
     android:textSize="32px"   
     android:textColorHighlight="#FF6600"/> 
    <Button 
     android:id="@+id/FishButton" 
     android:layout_height="wrap_content" 
     android:background="@drawable/backgroundlayer" 
     android:drawableLeft="@drawable/fishbutton" 
     android:text="Fish" 
     android:textColor="#FFFFFF" 
     android:textSize="32px" 
     android:textColorHighlight="#FF6600" 
     android:layout_gravity="center" 
     android:layout_width="match_parent"/> 
    <Button 
     android:id="@+id/PorkButton" 
     android:layout_height="wrap_content" 
     android:background="@drawable/backgroundlayer" 
     android:drawableLeft="@drawable/porkbutton" 
     android:text="Pork" 
     android:textColor="#FFFFFF" 
     android:textSize="32px" 
     android:textColorHighlight="#FF6600" 
     android:layout_gravity="center" 
     android:layout_width="match_parent"/> 
    <Button 
     android:id="@+id/VegetablesButton" 
     android:layout_height="wrap_content" 
     android:background="@drawable/backgroundlayer" 
     android:drawableLeft="@drawable/vegetablesbutton" 
     android:text="Vegetables" 
     android:textColor="#FFFFFF" 
     android:textSize="32px" 
     android:textColorHighlight="#FF6600" 
     android:layout_gravity="center" 
     android:layout_width="match_parent"/> 
</LinearLayout> 
</ScrollView> 
+0

Por favor, puesto que su diseño . ¿Tienes el mismo para los modos de retrato y paisaje? –

+0

Además, ¿hay alguna razón por la que no esté utilizando un ListView, a diferencia de un LinearLayout con un ScrollView? ¿Sus artículos de la lista son exactamente los mismos, y solo 5 de ellos? –

+0

Sí, son exactamente de la misma manera, solo cinco elementos – SickNick

Respuesta

19

quitar el android:layout_gravity="center" en su LinearLayout, cuando se cambia a modo horizontal la altura de la ScrollView es más grande que su tamaño de la pantalla, por lo que su centrar el LinearLayout en el ScrollView, a pesar de la eliminación puede que no sea la solución , eso es lo que está causando esto,

puede considerar la revisión de su diseño, podría tener más sentido usar una vista de lista para poder apoyar con éxito paisaje

+1

No hay forma de que mis artículos aparezcan en el centro de esa manera, además de eso, ¿verdad? :-( – SickNick

+0

Puede agregar "layout_gravity =" center "" en su ScrollView y tenerlo wrap_content. Esto dará como resultado que la Vista se centre en su contenedor cuando haya espacio suficiente y se desplace correctamente cuando no lo esté. – Graeme

2

sé que esto es un hilo viejo, pero me pasó dos días en este problema. Si bien la eliminación de la declaración "layout_gravity" ayuda al problema de corte, el comentario sobre no poder centrarse también es cierto. En última instancia, lo que funcionó para mí, que en mi opinión es un truco, fue tener la vista de desplazamiento en la parte superior de un diseño centrado y DOS diseños lineales en cascada en cascada. Además, la altura y el ancho tenían que ser contenidos ajustados en scrollview y linearlayouts. Esta no es la mejor solución, pero probé todo sin éxito, incluso estableciendo la gravedad en el código con setlayoutparams si los objetos eran menores que el ancho del ancho de la pantalla. Espero que esto ayude a alguien.

0

La sugerencia (eliminación de android:layout_gravity="center") que @slim dijo funciona pero no tiene una alineación central.

Mi Solución:

me fijo envolviendo el principal diseño largo con una LinearLayout con su conjunto gravity-center y dejar android:layout_gravity="center" siendo para el diseño principal:

<ScrollView 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      > 
     <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:gravity="center"> 

      <!-- .... the main long layout ... --> 

     </LinearLayout> 

</ScrollView> 
Cuestiones relacionadas