wrap_content 高度上的框架布局固定元素
Frame Layout fixed elements on wrap_content height
我有下一个设计:
Actual design app
代码:
<LinearLayout
android:id="@+id/edit_name"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="#99000000"
android:weightSum="1">
<FrameLayout
android:background="@color/tabIndicator"
android:layout_width="310dp"
android:layout_gravity="center"
android:clickable="true"
android:layout_height="wrap_content"
android:minHeight="136dp"
android:layout_weight="0.75">
<TextView
android:id="@+id/close_circle"
android:elevation="2dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="X"
android:background="@drawable/oval_corner"
android:backgroundTint="@color/colorPrimary"
android:layout_gravity="top|bottom|right"
android:layout_alignParentEnd="true"
android:paddingLeft="8dp"
android:paddingTop="3dp"
android:paddingRight="8dp"
android:paddingBottom="3dp"
android:textColor="@color/tabIndicator"
android:textStyle="bold"
android:layout_margin="2dp"
android:translationZ="2dp">
</TextView>
<TextView
android:id="@+id/textDescLarga"
android:layout_width="match_parent"
android:layout_height="208dp"
android:text="@string/text_placeholder_benefit"
android:textStyle="normal"
android:textSize="12dp"
android:textColor="@color/textDefault"
android:layout_gravity="bottom|center"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:maxLines = "12"
android:scrollbars="vertical">
</TextView>
<ImageView
android:id="@+id/imageMain"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:src="@drawable/placeholder_benefit"
android:layout_gravity="top|left">
</ImageView>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/textTitulo"
android:layout_gravity="center"
android:layout_marginBottom="0dp"
android:text="Nombre hotel"
android:textAlignment="center"
android:textStyle="bold"
android:textSize="19dp"
android:textColor="@color/cardview_dark_background"/>
</FrameLayout>
问题:
当我需要自动高度时,在文本上,无论是增加还是减少,我尝试了片段布局layout_height:wrap_content但是文本与图像重叠。
我做错了什么?还有其他方法吗?
谢谢
FrameLayout 在堆栈中呈现它的子项 - 一个在另一个之上,除非您使用 layout_gravity 来定位它们。 FrameLayout 通常用于整个可用屏幕 space - layout_height 和 layout_width 设置为与父级匹配。
您的问题是因为您将 layout_height 设置为包装内容,它会将小部件一个接一个地叠加。设置 layout_height 以匹配父级。或者对你的情况更好,使用 RelativeLayout。
我有下一个设计:
Actual design app
代码:
<LinearLayout
android:id="@+id/edit_name"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="#99000000"
android:weightSum="1">
<FrameLayout
android:background="@color/tabIndicator"
android:layout_width="310dp"
android:layout_gravity="center"
android:clickable="true"
android:layout_height="wrap_content"
android:minHeight="136dp"
android:layout_weight="0.75">
<TextView
android:id="@+id/close_circle"
android:elevation="2dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="X"
android:background="@drawable/oval_corner"
android:backgroundTint="@color/colorPrimary"
android:layout_gravity="top|bottom|right"
android:layout_alignParentEnd="true"
android:paddingLeft="8dp"
android:paddingTop="3dp"
android:paddingRight="8dp"
android:paddingBottom="3dp"
android:textColor="@color/tabIndicator"
android:textStyle="bold"
android:layout_margin="2dp"
android:translationZ="2dp">
</TextView>
<TextView
android:id="@+id/textDescLarga"
android:layout_width="match_parent"
android:layout_height="208dp"
android:text="@string/text_placeholder_benefit"
android:textStyle="normal"
android:textSize="12dp"
android:textColor="@color/textDefault"
android:layout_gravity="bottom|center"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:maxLines = "12"
android:scrollbars="vertical">
</TextView>
<ImageView
android:id="@+id/imageMain"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:src="@drawable/placeholder_benefit"
android:layout_gravity="top|left">
</ImageView>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/textTitulo"
android:layout_gravity="center"
android:layout_marginBottom="0dp"
android:text="Nombre hotel"
android:textAlignment="center"
android:textStyle="bold"
android:textSize="19dp"
android:textColor="@color/cardview_dark_background"/>
</FrameLayout>
问题:
当我需要自动高度时,在文本上,无论是增加还是减少,我尝试了片段布局layout_height:wrap_content但是文本与图像重叠。
我做错了什么?还有其他方法吗?
谢谢
FrameLayout 在堆栈中呈现它的子项 - 一个在另一个之上,除非您使用 layout_gravity 来定位它们。 FrameLayout 通常用于整个可用屏幕 space - layout_height 和 layout_width 设置为与父级匹配。
您的问题是因为您将 layout_height 设置为包装内容,它会将小部件一个接一个地叠加。设置 layout_height 以匹配父级。或者对你的情况更好,使用 RelativeLayout。