<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/messageLayout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/messageSender"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="10dp"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"/>

    <TextView
        android:id="@+id/messageSenderName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/messageSender"
        android:ellipsize="end"
        android:maxLines="1"
        android:singleLine="false"
        android:textColor="@color/list_text_color"
        android:textSize="16dp"
        android:layout_marginTop="5dp" />

    <TextView
        android:id="@+id/messageContent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/messageSender"
        android:layout_below="@id/messageSenderName"
        android:ellipsize="end"
        android:maxLines="1"
        android:singleLine="false"
        android:textColor="@color/codeFont"
        android:textSize="13dp"/>
</RelativeLayout>

En mi diseño, tengo un problema. Cuando me puse a marginTop="5dp" está bien, pero cuando uso marginBottom no pasa nada en mi diseño. También cuando me puse de relleno en el RelativeLayout que no funciona bien. ¿Cuál es el problema aquí? Me podrían dar alguna solución?

InformationsquelleAutor fish40 | 2011-12-27

7 Comentarios

  1. 104

    marginBottom no tiene ningún efecto si se establece android:layout_height="wrap_content" para <RelativeLayout>, en lugar de establecer como match_parent y verificación.

    • fill_parent es obsoleta a partir de la API de Nivel 8 y reemplazado por match_parent.
    • sí, lo sé, pero creo que esta respuesta es publicado 2 años atrás 😉
    • No hay necesidad de actualizar..tiene sentido..¿cuántas ans se puede actualizar entonces ?
    • Parece fijo en la API de 19+.
  2. 19

    Es realmente sólo un error de la <RelativeLayout>, por lo que se podría tratar de envolver el RelativeLayout dentro de un <LinearLayout> y establecer el margen de allí.

    • acaba de cambiar la relación lineal si es posible.
  3. 13

    No estoy seguro de en que de la revisión de android que usted está experimentando este problema. Miré a RelativeLayout en Android 4.2.2 (https://android.googlesource.com/platform/frameworks/base/+/android-4.2.2_r1.1/core/java/android/widget/RelativeLayout.java) y creo que hay un error en el onMeasure.

    En líneas 486 a 488, tenemos el siguiente código:

    if (isWrapContentHeight) {
        height = Math.max(height, params.mBottom);
    }

    En mi opinión, lo anterior debería leer:

    if (isWrapContentHeight) {
        height = Math.max(height, params.mBottom + params.bottomMargin);
    }

    Con android:layout_height=»wrap_content», RelativeLayout no parece tomar en cuenta la bottomMargin de la última verticalmente establecidos vista.

    Le sugiero que pruebe uno de los siguientes:

    *) Añadir un maniquí de vista que va a ser la última verticalmente establecidos vista, y asegúrese de que tiene el android:layout_below atributo. Tenga en cuenta que el maniquí de vista no tiene un margen inferior, está ahí para que RelativeLayout considera el margen inferior de puntos de vista establecidos por encima de ella. Para su caso, las maquetas de vista tendría este aspecto:

    <View
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_below="@id/messageSender"
    />

    *) Como otros han mencionado, para lograr el mismo efecto en otras formas, tales como Relleno.

    *) Un no-tan trivial solución es traer RelativeLayout, su plataforma de definiciones de estilo y de gestión de la Piscina de las clases en el proyecto, realizar la corrección de errores que he mencionado anteriormente y el uso de esta en cualquier lugar que normalmente uso RelativeLayout.

    *) Presentar un error con Google

    Espero que esto ayude.

    • Esto ha sido corregido en las últimas versiones de RelativeLayout, pero ahora depende de la meta del SDK de la versión que está utilizando. En Android 5.1.1, se hace mediante la comprobación de la versión como esta: if (targetSdkVersion < Build.VERSION_CODES.KITKAT) { height = Math.max(height, params.mBottom); } else { height = Math.max(height, params.mBottom + params.bottomMargin); }, vea la línea 502 – 508 aquí: android.googlesource.com/platform/frameworks/base/+/…
  4. 10

    Tal vez usted puede establecer android:paddingBottom="" de <RelativeLayout> para obtener el mismo efecto.

    • Esto no proporciona una respuesta a la pregunta. Para la crítica o la solicitud de aclaración de un autor, deja un comentario debajo de su post.
    • No sé:)
    • Este es un trabajo aceptable alrededor de un incomprensible error.
  5. 1

    Asegúrese de que el layout_height de su contenedor raíz se establece en match_parent en lugar de wrap_content.

    • protector de la vida ……………….
  6. 0

    Tuve un <View> dentro de un <RelativeLayout> y la marginBottom en que no había trabajo. Me enteré de que mi cadena de layout_below estaba roto, así que por lo tanto tiene sentido que el diseño no saber que ver el margen debe ser calculado.

    Si de la cadena se utiliza correctamente layout_below o las otras herramientas de posicionamiento, usted no necesita preocuparse acerca de wrap_content o match_parent al igual que otros están sugiriendo. Ejemplo:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
        <View
            android:id="@+id/separator"
            android:layout_width="match_parent"
            android:layout_height="1px"
            android:layout_marginBottom="11dp" />
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/separator">
    
            ...
  7. -3

    Funciona si uso android:layout_marginBottom with android:layout_alignParentBottom="true".

    Por ejemplo :

    android:layout_alignParentBottom="true"
    android:layout_marginBottom="50dp">
    • No, no, el problema es el layout_height=»wrap_content»

Dejar respuesta

Please enter your comment!
Please enter your name here