1

我将水平 LinearLayout 设置为 wrap_content。里面是一个垂直的LinearLayout,它包含一个允许多行的TextView(也是wrap_content)和一个ImageButton(wrap_content)。一些组件有边距和填充,所以空间很好。

当 TextView 中的文本很短时,一切都很好。当文本换成多行时,仍然可以。当文本几乎长到可以换行时,ImageButton 会被水平剪裁——它的左右两侧被剪掉。如果我拉出边距并填充它可以工作,但它当然看起来不太好。

我的猜测是布局系统在计算文本宽度时没有考虑一些边距和填充。然后它正在布置东西,总空间比第一次通过 TextView 认为的要少,所以它剪裁了布局中的第二个项目并尊重计算的 TextView 宽度。但这只是一个猜测。

没有写我自己的布局,有什么想法吗?

编辑

这是来自层次结构查看器的屏幕截图,显示了 ImageButton 的剪辑位置以及相关的 XML 突出显示。ImageButton 的边界与我所看到的一致:27dp 宽,而圆形图像本身实际上是 36dp 宽,并且 ImageButton 在每一侧都指定了 4dp 填充。

层次结构查看器的屏幕截图

同样,我必须仔细选择该文本:任何较短的按钮都可以;更长,它会换行,按钮又好了。

编辑

而且,这是我的 XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/messageBubble"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:minHeight="@dimen/message_bubble_min_height"
        android:layout_alignTop="@id/avatar"
        android:layout_alignLeft="@id/avatar"
        android:layout_marginTop="@dimen/message_bubble_margin_top"
        android:layout_marginLeft="@dimen/message_bubble_inset"
        android:layout_marginRight="@dimen/message_inbound_padding_inside"
        android:paddingLeft="@dimen/message_bubble_padding_outside"
        android:paddingRight="@dimen/message_bubble_padding_inside"
        android:paddingTop="@dimen/message_bubble_padding_v"
        android:paddingBottom="@dimen/message_bubble_padding_v"
        android:orientation="horizontal">

    <LinearLayout
            android:id="@+id/contentContainer"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:orientation="vertical">
        <TextView
                android:id="@+id/messageBody"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/message_body_margin_outside"
                android:layout_marginRight="@dimen/message_body_margin_inside"
                android:layout_marginTop="@dimen/message_body_margin_v"
                android:layout_marginBottom="@dimen/message_body_margin_v"
                android:gravity="left"
                android:autoLink="all"
                android:textSize="17dp" />
    </LinearLayout>

    <include layout="@layout/view_message_action_btn" />

</LinearLayout>

以及包含的 view_message_action_btn:

<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/actionButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@null"
    android:src="@drawable/action_btn"
    android:paddingLeft="@dimen/message_action_btn_padding_h"
    android:paddingRight="@dimen/message_action_btn_padding_h" />
4

0 回答 0