Xml-layout: ScrollView обрезает нижнюю часть встроенного элемента CardView

У меня есть единственный CardView внутри ScrollView, который работает безупречно, если высота CardView достаточно мала, чтобы прокрутка не требовалась. Однако, если CardView требуется прокрутка (для отображения большего изображения), нижняя часть CardView обрезается. Что я делаю неправильно?

Вот часть моего файла layout.xml:

<?xml version = "1.0" encoding = "utf-8"?>
<ScrollView xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
android:id = "@+id/scroll_view"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:layout_margin = "10dp"
android:fillViewport = "true" >

<android.support.v7.widget.CardView 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:id = "@+id/card_view"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:layout_margin = "8dp"
    android:elevation = "8dp"
    app:cardCornerRadius = "8dp">

    <android.support.constraint.ConstraintLayout
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:background = "@color/color_yellow_lighten_4"
        android:nestedScrollingEnabled = "false"
        android:orientation = "vertical">

        <ImageView
            android:id = "@+id/imageView_downloaded"
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:layout_marginEnd = "8dp"
            android:layout_marginStart = "8dp"
            android:layout_marginTop = "8dp"
            android:scaleType = "fitCenter"
            android:src = "@android:drawable/ic_menu_gallery"
            app:layout_constraintEnd_toEndOf = "parent"
            app:layout_constraintStart_toStartOf = "parent"
            app:layout_constraintTop_toTopOf = "parent" />

        <!-- several other TextView elements here not shown -->

    </android.support.constraint.ConstraintLayout>

</android.support.v7.widget.CardView>

Поделитесь своим макетом с вопросом

AskNilesh 15.05.2018 15:04

Я протестировал макет, используя приведенный выше код, опуская другие элементы. Результат (обрезается нижняя часть cardView) был таким же.

CEO tech4lifeapps 15.05.2018 15:13

Вы пробовали добавить android:clipToPadding = "false" и android:clipChildren = "false" в свой ScrollViewer?

Tam Huynh 15.05.2018 15:35

А также используйте android:layout_height = "match_parent" для ScrollViewer

Tam Huynh 15.05.2018 15:36

Настройка android:layout_height = "wrap_content" и android:fillViewPort=true кажется немного странной. Чего вы там пытаетесь достичь?

Sander 15.05.2018 15:39

@Sander Просто потому, что я обычно так делаю, просто чтобы проверить, работает ли это для него.

Tam Huynh 15.05.2018 15:45

@TamHuynh Извините за путаницу, это был комментарий не к вам, а к OP. Похоже, мы вводили то же предложение, что и вы отправили ранее.

Sander 15.05.2018 15:49

@CEO tech4lifeapps Мне эта строчка кажется странной: android:nestedScrollingEnabled = "false". ConstraintLayout не является прокручиваемым представлением. @Sander Хорошо, не волнуйся

Tam Huynh 15.05.2018 15:50

Я перепробовал все ваши предложения и варианты. К сожалению, реальный результат остался прежним. Но что бросилось в глаза, так это ваше замечание: ConstraintLayout не является прокручиваемым представлением. Итак, что мне делать?

CEO tech4lifeapps 15.05.2018 16:14
0
9
331
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот решение, которое я нашел:

<android.support.v7.widget.CardView 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:id = "@+id/card_view"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:elevation = "8dp"
    app:cardCornerRadius = "8dp"
    app:cardUseCompatPadding = "true"
    >
  1. Удалите android:layout_margin = "8dp" из CardView

  2. Добавить app:card_view:cardUseCompatPadding = "true" в CardView

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

Tam Huynh 15.05.2018 17:50

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