2011-06-08 13 views
11

Estoy tratando de hacer mis diseños más amigables con el paisaje, y un patrón común que tengo es agregar un LinearLayout con algunos botones (por ejemplo, OK | Cancelar) y simplemente establecer un valor layout_weight para que el espacio está distribuido uniformemente El problema es que cuando usas un teléfono o (especialmente) una tableta en modo horizontal, terminas con enormes botones que parecen ridículos. Intenté configurar maxWidth en los botones y en el diseño lineal, pero fue en vano. ¿Cuál sería la forma más fácil de lograr esto? A saber, establecer un tamaño horizontal máximo para la vista para que no crezca a todo el ancho. Probé un montón de cosas diferentes, pero ninguna funcionó.Combine layout_weight y maxWidth para vistas

Aquí hay una disposición de la muestra:

<LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_horizontal" 
     android:paddingLeft="10dp" 
     android:paddingRight="10dp" 
     android:paddingTop="6dp" 
     android:paddingBottom="6dp"> 
     <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:enabled="false" 
     android:textStyle="bold" 
     android:text="@string/button1" /> 
     <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="@string/button2" /> 
    </LinearLayout> 

Nota: Sé que puedo crear un nuevo archivo de diseño de paisaje y hacer magia allí. Quiero mantener los archivos de diseño especializados al mínimo, y espero que esto no los requiera.

Respuesta

0

no tengo Eclipse aquí para probarlo, pero me gustaría utilizar un RelativeLayout lugar, algo así como:

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    > 
    <View 
    android:id="@+id/centerView" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_marginLeft="5dp" 
    android:layout_marginRight="5dp" 
    /> 
    <Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_toLeftOf="@id/centerView" 
    android:enabled="false" 
    android:textStyle="bold" 
    android:text="@string/button1" 
    /> 
    <Button 
    android:id="@+id/button2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_toRightOf="@id/centerView" 
    android:text="@string/button2" 
    /> 
</RelativeLayout> 

Como ya he dicho, no puedo probarlo ahora mismo, pero se puede trabajar alrededor de esta idea

En una nota al margen, a menos que su diseño sea muy simple, normalmente creo diseños separados para el paisaje. Es un poco más de trabajo, pero puedes optimizar las vistas mucho mejor de esa manera. Especialmente, si planea soportar pantallas más grandes.

+0

Por cierto, ¿esto califica como [trampas] (http://stackoverflow.com/questions/6254303/android-programatically-select-gallary-image/6255224#6255224)? ;) – Aleadam

+0

Heh, no, esto es bueno. Lo estoy probando y funcionó bastante bien, excepto por el hecho de que RelativeLayout se comió el EditText que tengo arriba. ¡Pero parece prometedor! – dmon

+0

@dmon tendrá que agregar 'android: layout_below =" @ id/textView1 "' (o cualquiera que sea la identificación) a cada una de las Vistas. RelativeLayout es un diseño muy poderoso. Eche un vistazo a todos los attrs [aquí] (http://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.html). – Aleadam

1

Después de jugar un poco con los diseños relativos, me encontré con this answer, que es lo que terminé usando.

+0

Supongo que se refería a las respuestas "extender LinearLayout y anular la función onMeasure" en esa página. La página tiene una respuesta más reciente, "Agregar un diseño externo" http://stackoverflow.com/questions/5875877/setting-a-maximum-width-on-a-viewgroup#23072507, que es mucho más simple (pero no lo hice) t probarlo). – Jerry101

-1
<RelativeLayout 
    android:id="@+id/rlMain" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginLeft="12dp" 
    android:layout_marginRight="12dp"> 

    <View 
     android:id="@+id/vCenter" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_centerHorizontal="true" 
     android:layout_marginRight="5dp" 
     android:layout_marginLeft="5dp"/> 

    <Button 
    android:id="@+id/btnOne" 
    android:layout_width="wrap_content" 
    android:layout_height="40dp" 
    android:layout_toLeftOf="@id/vCenter" 
    <!--Change this for different widths--> 
    android:minWidth="200dp"/> 

    <Button 
    android:id="@+id/btnTwo" 
    android:layout_width="wrap_content" 
    android:layout_height="40dp" 
    android:layout_toRightOf="@id/vCenter" 
    <!--Change this for different widths--> 
    android:minWidth="200dp"/> 
</RelativeLayout> 
+0

agregar una pequeña explicación a su respuesta es mejor para los lectores en el futuro? – HaveNoDisplayName

Cuestiones relacionadas