8

Estoy tratando de crear un bocadillo de diálogo para una sala de chat. Cada una de las burbujas de discurso tiene el diseño xml adjunto.Android ImageView no coincide con_parent dentro de FrameLayout debajo de GingerBread

estoy logrando esto estableciendo el Textview a wrap_content, el globo de diálogo imageView a match_parent y la frame_layout a wrap_content. Para que la imagen speech_bubble detrás del texto se escale de acuerdo con la cantidad de texto en la burbuja.

que definir el ancho de la Textview para que coincida con los padres y la altura a wrap_content y por alguna razón, funciona perfectamente como se requiere en Ice Cream Sandwich (Android 4.1). Sin embargo, en Gingerbread, la burbuja de voz de imageView interior no cambia a match_parent para que el texto encaje perfectamente dentro de la burbuja. En Gingerbread, la imagen interior ViewView se mantiene del mismo tamaño siempre, independientemente del texto y el texto se desborda fuera de la burbuja. pesar de que el FrameLayout expande a wrap_content, la imageView no match_parent, ya que se supone que es.

¿Alguna idea sobre por qué esto está sucediendo? ¿Hay algún otro parámetro que pueda establecer a través de xml o un método que pueda invocar programáticamente para solucionarlo?

Gracias!

comportamiento correcto en el ICS:

Correct Behavior in ICS

comportamiento incorrecto en pan de jengibre: Disposición Incorrect Behavior in GingerBread

XML:

<merge xmlns:android="http://schemas.android.com/apk/res/android"> 
     <FrameLayout 
            xmlns:android="http://schemas.android.com/apk/res/android" 
            android:id="@+id/speech_bubble_framelayout" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:orientation="horizontal" 
            android:background="@color/color_transparent" 
            android:layout_toRightOf="@id/message_user_imageView"> 

        <ImageView xmlns:android="http://schemas.android.com/apk/res/android" 
                   android:id="@+id/message_background_imageview" 
                   android:layout_width="match_parent" 
                   android:layout_height="match_parent" 
                   android:layout_margin="5dp" 
                   android:scaleType="fitXY" 
                   android:layout_centerInParent="true" 
                   android:textColor="@color/color_brown_mud" 
                   android:background="@drawable/chat_bubble_flipped" 
                /> 
        <TextView 
                android:id="@+id/message_textView" 
                android:layout_width="wrap_content" 
                android:layout_height="match_parent" 
                android:maxEms="10" 
                android:background="@color/color_transparent" 
                android:textColor="@color/color_brown_uiDesign_pallete" 
                android:textSize="15sp" 
                android:textStyle="bold" 
                android:gravity="center_horizontal" 
                android:text="Message" 
                android:padding="5dp" 
                android:layout_marginLeft="25dp" 
                android:layout_marginRight="20dp" 
                android:layout_marginTop="15dp" 
                android:layout_marginBottom="15dp" 
                /> 
    </FrameLayout> 
</merge> 

Respuesta

24

Desde el aspecto de la misma, esto es causado por una dependencia circular en sus tamaños: el texto interno y el tamaño de la imagen dependen de FrameLayout (match_parent), mientras que el tamaño de FrameLayout depende de lo que contiene (wrap_content). Se desaconseja el uso de FrameLayout cuando hay más de un niño involucrado exactamente por este tipo de razones. Por razones de seguridad, me gustaría recomendar el cambio de la FrameLayout a un RelativeLayout, y el establecimiento de la siguiente propiedad en la vista de la imagen interna:

android:layout_alignTop="@+id/message_textview" 
android:layout_alignBottom="@+id/message_textview" 

Esto asegurará que su imagen siempre coincide con el tamaño de su texto.

+0

Eso solucionó el problema. Usé alignBottom y alignRight con algo de relleno. ¡Gracias! – Bala

Cuestiones relacionadas