minHeight不适用于相对布局

时间:2018-10-31 11:00:31

标签: android android-layout android-relativelayout

我在RelativeLayout中使用了ImageView和Textview。

我期望什么:

  1. Textview的高度应为wrap_content
  2. Imageview应填充剩余空间
  3. Imageview的最小高度为250dp。

Xml文件

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <ImageView
        android:minHeight="250dp"
        android:layout_above="@+id/linear"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/facebookshare">

    </ImageView>
    <TextView
        android:layout_alignParentBottom="true"
        android:id="@+id/linear"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

</RelativeLayout>

输出:(图像视图高度变为0)

enter image description here

预期:(图像视图高度应> 250 dp // minHeight = 250dp)

enter image description here

当内容较小时,Imageview应该像填充整个屏幕一样

enter image description here

有人可以帮我吗!

6 个答案:

答案 0 :(得分:1)

如果您使用的是ConstraintLayout,请使用以下代码,否则请告诉我。需要使用NestedScrollView

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.appcompat.widget.AppCompatImageView
            android:id="@+id/img"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            app:layout_constraintHeight_min="250dp"
            android:src="@drawable/ic_launcher_background"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toTopOf="@id/txt" />

        <androidx.appcompat.widget.AppCompatTextView
            android:id="@+id/txt"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="text"
            app:layout_constraintTop_toBottomOf="@id/img"
            app:layout_constraintBottom_toBottomOf="parent" />

    </android.support.constraint.ConstraintLayout>

答案 1 :(得分:1)

尝试这种方式

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:contentDescription="@string/app_name"
        android:minHeight="250dp"
        android:layout_above="@+id/tvText"
        android:src="@drawable/kid" />


    <TextView
        android:id="@+id/tvText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@color/colorAccent"
        android:text="@string/large_text" />


</RelativeLayout>

输出

  

大文本时

enter image description here

  

小文本时

enter image description here

更新

<string name="large_text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce pulvinar nec justo id bibendum.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce pulvinar nec justo id bibendum.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce pulvinar nec justo id bibendum.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce pulvinar nec justo id bibendum.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce pulvinar nec justo id bibendum.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis bibendum mattis risus eget pulvinar. Praesent commodo erat enim, id congue sem tristique vitae. Proin vitae accumsan justo, ut imperdiet tellus. Mauris neque nibh, hendrerit id tortor vel, congue sagittis odio. Morbi elementum lobortis maximus. Etiam sit amet porttitor massa. Fusce sed magna quis arcu tincidunt finibus vitae id erat. Pellentesque massa mi, imperdiet eget accums</string>    <!-- TODO: Remove or change this placeholder text -->

    <string name="small_text">Hello World Lorem ipsum dolor sit amet, consectetur adipiscing elit
    Hello World Lorem ipsum dolor sit amet, consectetur adipiscing elit
    Hello World Lorem ipsum dolor sit amet, consectetur adipiscing elit</string>

答案 2 :(得分:0)

这只是一个黑客。

您可以将minHeight赋予ImageView,而不是将maxLines赋予TextView。您也可以在末尾放大TextView的大小。

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:scaleType="centerCrop"
        android:src="@drawable/img_cat">
    </ImageView>

    <TextView
        android:id="@+id/linear"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:maxLines="5"
        android:scrollbars="vertical"
        android:textSize="40sp"
        tools:text="asdlfkasdfkasdf"
        />

</LinearLayout>

img

答案 3 :(得分:0)

minHeight中的

ImageView无效,仅因为您将ImageView的高度设置为match_parent。因此,它获得了足够的空间(超过250dp的空间可以渲染并忽略minHeight)。

只需将android:layout_height="match_parent"更改为android:layout_height="wrap_content"

<ImageView
      android:layout_above="@+id/linear"
      android:minHeight="250dp"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:src="@drawable/facebookshare">

工作样本布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/linear"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="sdvdsibvdsv"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:src="@drawable/facebookshare"
        app:layout_constraintBottom_toTopOf="@+id/linear"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHeight_min="250dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

布局设计视图可能会向您显示错误的UI呈现。只是运行它。它将起作用。

答案 4 :(得分:0)

将ImageView封装在另一个布局中:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:layout_above="@+id/linear">

        <ImageView
            android:minHeight="250dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:src="@drawable/what"/>
    </LinearLayout>

    <TextView
        android:layout_alignParentBottom="true"
        android:id="@+id/linear"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</RelativeLayout>

答案 5 :(得分:-1)

尝试一下,效果很好。使用layout_weight。为图像设置maxWeight,为文本设置剩余的权重。当文本长度增加时,它将减小图像高度。这取决于您提供的文字的长度。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="3">

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        tools:srcCompat="@tools:sample/backgrounds/scenic"/>

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:layout_weight="1"
        android:text="Hhhjkahsgkjhasd jasdhfkjsd hfdjkshfuernf jsdhfsudf jdhfkjdshf jhdfjshf kjdhf kjdhf kajhdf  jhsgdfs jd sdgfjkgf sjdgfs jfshdg "/>
</LinearLayout>