我将水平LinearLayout设置为wrap_content。 Inside是一个包含单个TextView的垂直LinearLayout,它允许多行(也包括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" />