2011-09-13 21 views
22

En la imagen adjunta, quiero que la columna de botones coincida con la altura de la imagen, pero también quiero que haya una altura mínima para la columna de botones.does minHeight ¿hacer algo?

Coincide correctamente con la altura de la imagen, pero no respeta el minHeight, y deslizará los botones hacia abajo.

estoy fijando estas propiedades para la columna de botones:

<LinearLayout 
    ... 
    android:layout_alignTop="@+id/image" 
    android:layout_alignBottom="@+id/image" 
    android:minHeight="150dp" 
    > 

enter image description here

Respuesta

38

no sé todos sus requisitos exactos, pero parece que puede resolver esto con otra capa más o menos como en tu diagrama. Establezca el minHeight en un diseño externo y luego solo fill_parent/match_parent en el interior. Tal vez algo como:

<LinearLayout 
    android:orientation="horizontal" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:minHeight="150dp"> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_height="fill_parent" 
     android:layout_width="wrap_content"> 
    </LinearLayout> 
    <ImageView /> 
</LinearLayout> 
+2

Pero recuerda: si utilizas muchos diseños, es posible que tu aplicación se vuelva lenta al inicio. Parece que los diseños necesitan mucha memoria al inicio, lo que podría desencadenar una recolección de basura que ralentiza su aplicación hasta que la memoria necesaria para el inicio se haya liberado nuevamente. Y sí, tengo ese problema y actualmente trato de cambiar a RelativLayout. – Martin

6

pregunta difícil porque llama TextView.setMinHeight - pero entonces no se está utilizando un TextView.

Por lo general, android:minHeight hace algo, pero no en su caso particular.

+5

Esta fue una buena respuesta a la pregunta original. Probablemente no ayude al usuario a alcanzar su objetivo final, pero de todos modos lo encontré interesante. – jwir3

+1

Esto es completamente incorrecto. minHeight en general para vistas es un atributo válido. Su equivalente programático es https://developer.android.com/reference/android/view/View.html#setMinimumHeight(int) –

+1

@David Liu El hecho de que el atributo sea válido en el XML no significa que esté almacenado en el ver. E incluso cuando el atributo se almacena en la vista, esto no significa que el administrador de diseño activo realmente lo utilice. Y para que sea aún más divertido: hay un 'TextView.setMinHeight' y un' View.setMinimumHeight' – Martin

0

Aunque mi otra respuesta todavía es válida, hoy en día tenemos el beneficio de ConstraintLayout. Estoy seguro de que el póster original ya pasó de largo este problema, pero para el futuro de los usuarios: puede lograr el mismo resultado sin la capa adicional de ViewGroup s. Algo como esto:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="150dp"> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:text="Button1" 
     app:layout_constraintBottom_toTopOf="@+id/button2" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toTopOf="parent" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:text="Button2" 
     app:layout_constraintBottom_toTopOf="@+id/button3" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/button1" /> 

    <Button 
     android:id="@+id/button3" 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:text="Button3" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/button2" /> 

    <android.support.constraint.Barrier 
     android:id="@+id/barrier" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:barrierDirection="end" 
     app:constraint_referenced_ids="button1,button2,button3" /> 

    <ImageView 
     android:id="@+id/image" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintEnd_toEndOf="parent" 
     app:layout_constraintStart_toStartOf="@id/barrier" 
     app:layout_constraintTop_toTopOf="parent" /> 
</android.support.constraint.ConstraintLayout> 

Posiblemente es posible que tenga algo como:

app:layout_constrainedWidth="true" 

para la ImageView para manejar las imágenes más grandes, pero yo no lo he probado.

Cuestiones relacionadas