我将水平 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" />