将TextView宽度设置为wrap_content的LinearLayout剪辑子项

时间:2017-01-29 22:48:02

标签: android android-layout textview android-linearlayout

我有一个包含TextView和ImageView的LinearLayout。 TextView宽度设置为wrap_content,但问题是当宽度达到父宽度时。文本内容将正确地换行到2行或更多行,但TextView和ImageView将被剪切在左侧和右侧。我能找到的最相似的问题是this one,它是从2013年开始的,没有解决方案。

具体来说,我在this view遇到了问题,但我创建了以下更简单的视图来举例说明问题:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/card_top_holder"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/card_top_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="One Two Three Four Five"
        android:textSize="40sp"/>

    <ImageView
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:src="@drawable/ic_volume_up_black_48dp"/>
</LinearLayout>

问题在于: LinearLayout with children being clipped 这是通常的布局: LinearLayout without children being clipped

当布局与另一个视图重叠时,在LinearLayout上设置android:clipChildren="false"甚至不会阻止裁剪。

这是最后一张图片来证明它在真实设备上发生,而不仅仅是布局查看器: clipped views on a real device

我基本上没有想法。有什么想法吗?这是Android布局系统的问题吗?感谢您的帮助和考虑!

1 个答案:

答案 0 :(得分:1)

您可以使用android:layout_weight

获得所需的结果
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/card_top_holder"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/card_top_text"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="One Two Three Four Five"
        android:textSize="40sp"/>

    <ImageView
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:src="@drawable/ic_volume_up_black_48dp"/>
</LinearLayout>

编辑: 有关layout_weight如何运作的文档的一点引用

  

LinearLayout还支持使用android:layout_weight属性为各个孩子分配权重。此属性根据应在屏幕上占用多少空间为视图指定“重要性”值。较大的权重值允许它扩展以填充父视图中的任何剩余空间。子视图可以指定权重值,然后视图组中的任何剩余空间将按其声明权重的比例分配给子项。默认权重为零。

     

例如,如果有三个文本字段,其中两个声明权重为1,而另一个没有权重,则没有权重的第三个文本字段不会增长,只会占用其内容所需的区域。在测量所有三个场之后,另外两个将平均扩展以填充剩余的空间。如果第三个字段的权重为2(而不是0),那么它现在被宣布比其他字段更重要,因此它获得剩余空间总量的一半,而前两个平均分配其余部分。