Minheight не работает с относительным макетом

Я использовал ImageView и Textview внутри RelativeLayout.

Чего я жду:

  1. Высота текстового просмотра должна быть 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 = 250 dp)

enter image description here

Когда Контент маленький, Imageview должен заполнять экран, как

enter image description here

Может кто-нибудь мне помочь!!!

@NileshRathod спасибо, позвольте мне попробовать для вертикальных просмотров.

Jyoti JK 31.10.2018 12:07

если возможно, поделитесь ожидаемым результатом в виде изображения

AskNilesh 31.10.2018 12:08

@NileshRathod Я могу это объяснить. Текстовое поле должно быть видно на экране, даже если есть большой контент. Изображение должно заполнить оставшееся место на экране. Но минимальная высота просмотра изображения должна быть 250dp.

Jyoti JK 31.10.2018 12:15

Вам нужен прокручиваемый textView с большим текстом?

Khemraj Sharma 31.10.2018 12:18

@Khemraj Нет, я должен уместиться на экране.

Jyoti JK 31.10.2018 12:20

@JyotiJK любезно поделитесь ожидаемым результатом в виде изображения для обоих случаев, чтобы понять ваши требования.

AskNilesh 31.10.2018 12:21

См. Обновленный ответ.

Khemraj Sharma 31.10.2018 12:22

@NileshRathod проверьте отредактированный вопрос

Jyoti JK 31.10.2018 12:38

@JyotiJK Попробуй мой ответ сейчас.

Pankaj Kumar 31.10.2018 12:46

@JyotiJK посмотри на мой ответ

ILLIA DEREVIANKO 31.10.2018 13:19

@PankajKumar Это была моя ошибка, я не пробовал ни ваши, ни мои решения во время выполнения.

Khemraj Sharma 31.10.2018 13:20
1
12
2 193
6

Ответы 6

Это просто взлом.

Вместо того, чтобы отдавать minHeightImageView, вы можете отдавать maxLinesTextView. Вы также можете сделать 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

если размер текста и межстрочное пространство изменяются, то использование концепции максимального количества строк не будет хорошей идеей.

Jyoti JK 31.10.2018 12:30

Я не понял вас, но вы можете установить maxline в соответствии с вашими потребностями. Вы также можете запрограммировать адаптивный текст с помощью библиотеки SSP.

Khemraj Sharma 31.10.2018 12:33

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>

Возможно, представление макета покажет вам некорректный рендеринг пользовательского интерфейса. Просто запустите это. Это будет работать.

Я установил wrap_content, но он устанавливает высоту менее 250 dp, если содержимое текстового представления велико.

Jyoti JK 31.10.2018 12:19

@JyotiJK Используйте оптимизированный код макета. Это работает так, как вы ожидали.

Pankaj Kumar 31.10.2018 12:45

@Khemraj Вы внимательно прочитали мой ответ. Что я там написал? Пробовали во время бега?

Pankaj Kumar 31.10.2018 13:09

@PankajKumar Хорошо, вот в чем проблема. Я не тестировал свои решения также во время выполнения.

Khemraj Sharma 31.10.2018 13:16

@PankajKumar Круто, я не знаю, сработало ли это на твоей стороне. это выводится в моем устройстве. i.stack.imgur.com/5OE4D.png

Khemraj Sharma 31.10.2018 13:29

Посмотрите этот снимок экрана, я увеличил размер текста только для проверки. i.stack.imgur.com/T22R5.png

Khemraj Sharma 31.10.2018 13:44

Позвольте нам продолжить обсуждение в чате.

Pankaj Kumar 31.10.2018 14:09

Используйте следующий код, если вы используете 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>

@Khemraj я проверил свое решение. Он отлично работает с крупным текстом. Если вам нужно прокрутить только текст или вам нужно обрезать большой текст, думаю, вы можете сделать это сами

ILLIA DEREVIANKO 31.10.2018 13:14

@Khemraj, только если прокрутка контента не требуется

ILLIA DEREVIANKO 31.10.2018 13:43

Поскольку ПО этого не требует. сказал в комментарии No, I should fit to the screen.

Khemraj Sharma 31.10.2018 13:45

Поместите 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>

Попробуйте, он отлично работает. Используйте 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>

Попробуй так

<?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>

ВЫХОД

When Large text

enter image description here

When Small text

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>

Но это тот же код, который я опубликовал в вопросе. Не знаю, почему у меня не работает :(

Jyoti JK 01.11.2018 05:07

@JyotiJK странно, что приведенный выше код отлично работает для меня как в XML, так и во время выполнения

AskNilesh 01.11.2018 05:09

@NileshRathod Ваш ответ должен работать. Мой первый подход был таким же, но я не понял, почему это не работает, даже копипаст вашей версии также не работает для меня ... этот комментарий не касается каких-либо отрицательных моментов в вашем ответе. На самом деле я хотел найти причину, по которой это не работает, хотя это должно работать.

Pankaj Kumar 01.11.2018 06:04

@PankajKumar, я понимаю, что не беспокойтесь о том, что мы все здесь, чтобы помогать друг другу

AskNilesh 01.11.2018 06:08

@NileshRathod Не могли бы вы попробовать этот код с очень длинным текстом?

Pankaj Kumar 01.11.2018 06:26

@PankajKumar позволь мне попробовать

AskNilesh 01.11.2018 06:27

@NileshRathod & PankajKumar Большое спасибо за ваши усилия. Даже я проверил вопросы "Imageview minHeight не работает". Решение этих вопросов - установить для adjustViewBounds значение true. Но у меня не работает :(

Jyoti JK 01.11.2018 06:34

@NileshRathod Нет, пожалуйста, установите текст, который может выходить за пределы одного экрана. Актуальная проблема есть. Даже текущего значения вашего крупного текста недостаточно, чтобы сделать изображение маленьким или сделать его за пределами экрана. :(

Pankaj Kumar 01.11.2018 06:36

@JyotiJK Мы дали вам 2 решения с ConstraintLayout, вы это проверили? У обоих ответов мало обновлений, и оба отлично работают и для слишком больших текстов. Даже это решение должно работать, но мы пытаемся выяснить, почему это не работает.

Pankaj Kumar 01.11.2018 06:37

Другие вопросы по теме