Как установить переменную высоту, либо match_constraint, либо wrap_content на основе, которая больше - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть ScrollView -> ConstraintLayout, который занимает практически весь экран. У меня есть несколько пунктов, выложенных здесь на экране, а также меню, которые еще не занимают весь вид. Меню поменяет фрагменты в контейнере, который ограничен в нижней части макета ограничения. Теперь проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти способ ограничить контейнер до конца страницы и установить его высоту равным match_constraint, а также увеличить его на основе размера от высоты фрагмента внутри контейнер, позволяющий затем прокручивать страницу. Я могу настроить контейнер на обертывание контента, и если его достаточно, он отлично работает, но тогда, если контент меньше остальной части экрана, он не заполняет экран и не рисует фон контейнеров снизу, как я. хотел бы.

val tc = super.requireContext()

        val scrollView = ScrollView(tc)
        scrollView.id = View.generateViewId()
        scrollView.isFillViewport = true
        scrollView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)

        val thisLayout = ConstraintLayout(tc)
        thisLayout.id = View.generateViewId()
        thisLayout.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
        scrollView.addView(thisLayout)

        val menuLayout = ManageableMenu(tc,listOf(
            ManageableMenu.ManageableMenuItem("Item 1", Fragment()),
            ManageableMenu.ManageableMenuItem("Item 2", Fragment()),
            ManageableMenu.ManageableMenuItem("Item 3", Fragment())
        ))
        menuLayout.listener = this
        val menuLayoutConstraint = menuLayout.layoutParams as ConstraintLayout.LayoutParams
        menuLayoutConstraint.topToBottom = thisLayout.id
        menuLayoutConstraint.startToStart = thisLayout.id
        menuLayoutConstraint.endToEnd = thisLayout.id
        menuLayout.setPadding(0, 0, 0 , convertToDP(10, tc))
        thisLayout.addView(menuLayout)

        val fragmentContainer =  FrameLayout(tc)
        fragmentContainer.id = View.generateViewId()
        fragmentContainer.setBackgroundColor(Color.parseColor("#262626"))
        val fragmentContainerLayout = ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_CONSTRAINT, ConstraintLayout.LayoutParams.MATCH_CONSTRAINT)
        fragmentContainerLayout.topToBottom = menuLayout.id
        fragmentContainerLayout.leftToLeft = thisLayout.id
        fragmentContainerLayout.rightToRight = thisLayout.id
        fragmentContainerLayout.bottomToBottom = thisLayout.id
        thisLayout.addView(fragmentContainer, fragmentContainerLayout)

Теперь это прекрасно работает без содержания. Тем не менее, когда я добавляю в фрагментContainer представление, которое выше, чем ограниченная высота контейнера, я не могу прокрутить.

Когда я устанавливаю для fragContainers height значение "WRAP_CONTENT", оно отлично работает, когда содержимое больше, чем остальная часть экрана, прокрутка и все остальное. Но если нет или ограничено, содержание. Фон контейнеров не растягивается до нижней части экрана и выглядит как мусор.

Должен быть какой-то способ заставить эту работу работать правильно? Я пробовал много разных свойств на LayoutParams, таких как minConstrainedHeight и еще много чего, но ничего не работает. Заранее спасибо!

...