使用自动尺寸

时间:2017-07-31 17:36:54

标签: android xml

我正在建立聊天,并且我试图在TextView周围绘制一个语音气泡,我想根据文本长度调整气泡大小。

我已经尝试在textview中插入可绘制的语音气泡,但我无法调整气泡内的文本,因此我将textview包装在相对布局中。

现在,无论内部文本是什么,气泡大小都不会改变。

Demo

代码(聊天行):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_weight="1"
    android:padding="3sp"
    >
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/test"
        >
    <TextView
        android:id="@+id/tvMsg"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:padding="10sp"
        android:fontFamily="sans-serif-light"
        android:textColor="#fdccc8"
        android:textSize="20dp"
        android:text="OneTwoThree"
        android:layout_marginStart="29dp"
        android:layout_marginEnd="15dp"
        android:layout_marginTop="3sp"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true" />
    </RelativeLayout>
</LinearLayout>

代码(语音泡沫形状)

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item>
        <rotate
            android:fromDegrees="-45"
            android:pivotX="0%"
            android:pivotY="0%" >
            <shape android:shape="rectangle">
                <solid android:color="#da4131" />
            </shape>
        </rotate>
    </item>
    <item android:left="20dp">
        <shape
            android:shape="rectangle">
            <solid android:color="#da4131"/>
            <corners
                android:radius="1dp"
                android:bottomLeftRadius="15dp"
                android:bottomRightRadius="15dp"
                android:topLeftRadius="5dp"
                android:topRightRadius="15dp" />
        </shape>
    </item>

</layer-list>

1 个答案:

答案 0 :(得分:0)

我认为可以通过水平LinearLayout包裹ImageView(对于三角形)和TextView(具有与三角形颜色匹配的纯色背景)来实现。 Android Studio会告诉您应该使用android:drawableLeft而不是使用LinearLayout和两个孩子,但我不相信如果您使用该属性,您实际上可以获得所需的样式。

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="12dp"
    android:orientation="horizontal">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/speech_left"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxWidth="240dp"
        android:paddingTop="8dp"
        android:paddingLeft="12dp"
        android:paddingRight="12dp"
        android:paddingBottom="8dp"
        android:textColor="#fff"
        android:textSize="15sp"
        android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
        android:background="#f00"/>

</LinearLayout>

enter image description here