将子宽度调整为父宽度

时间:2015-11-06 11:21:59

标签: android android-layout android-xml

我遇到了xml布局的问题。

这是完整的xml

<FrameLayout
android:id="@+id/root"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="match_parent">

<ImageView
    android:id="@+id/image"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:adjustViewBounds="true"
    tools:src="@drawable/segment_cultura"/>

<LinearLayout
    android:id="@+id/message_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:background="@color/black_divider"
    android:padding="4dp">

    <TextView
        android:id="@+id/message"
        style="@style/TextAppearance.AppCompat.Caption"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:ellipsize="end"
        android:maxLines="2"
        android:textColor="@color/white_secondary_text"
        />

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

<ImageView
    android:id="@+id/cancel"
    android:layout_width="24dp"
    android:layout_height="24dp"
    android:layout_gravity="top|end"
    android:layout_margin="4dp"
    android:src="@drawable/ic_close"/>
</FrameLayout>

目标:将此项用作固定高度水平RecyclerView的项目,仅使用image来确定项目的大小。其他观点(例如message_containercancel)需要适应此大小。

问题message_container需要填充项目的宽度,但在message中有长文本时,不应修改项目宽度。它应该到第二行然后进行椭圆化。相反,message永远不会转到第二行,并使父母(message_containerroot)放大以适合其文字。

我正在寻找只涉及xml的解决方案,如果我找不到,custom view优先于adapter中的某些逻辑。

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

我通过使用:

解决了这个问题
image.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
         if (root != null && image.getWidth() != 0)
             root.getLayoutParams().width = image.getWidth();
    });