Вид есть,minHeight
но почему-то не хватает maxHeight
:
То, чего я пытаюсь добиться, - это заполнить некоторые элементы (представления) ScrollView
. Когда есть элементы 1..3, я хочу отобразить их напрямую. Значение ScrollView
имеет высоту 1, 2 или 3 элементов.
Когда есть 4 или более элементов, я хочу ScrollView
прекратить расширение (таким образом, а maxHeight
) и начать предоставлять прокрутку.
Однако, к сожалению, нет способа установить maxHeight
. Поэтому мне, вероятно, придется программно устанавливать мою ScrollView
высоту, WRAP_CONTENT
когда есть 1..3 элемента, и устанавливать высоту, 3*sizeOf(View)
когда есть 4 или более элементов.
Может кто-нибудь объяснить, почему нет maxHeight
при условии, когда уже есть minHeight
?
(Кстати: некоторые взгляды, например, ImageView
имеют maxHeight
реализованный.)
Ответы:
Ни одно из этих решений не работало для того, что мне было нужно, для ScrollView было установлено значение wrap_content, но имел maxHeight, чтобы он прекратил расширение после определенной точки и начал прокрутку. Я просто переопределил метод onMeasure в ScrollView.
Это может работать не во всех ситуациях, но, безусловно, дает мне результаты, необходимые для моего макета. И это также обращается к комментарию Madhu.
источник
Чтобы создать maxHeight
ScrollView
илиListView
значение maxHeight, вам просто нужно создать прозрачную линейную схему вокруг него с высотой, на которую вы хотите рассчитать maxHeight. Затем вы устанавливаете высоту ScrollView наwrap_content
. Это создает ScrollView, который, кажется, растет, пока его высота не станет равной родительскому LinearLayout.источник
Это помогло мне настроить его в xml:
MaxHeightScrollView.java:
attr.xml
пример макета
источник
(Я знаю, что это не дает прямого ответа на вопрос, но может быть полезным для тех, кто ищет функциональность maxHeight)
ConstraintLayout предлагает максимальную высоту для своих детей через
или
Пример использования здесь .
источник
Я бы прокомментировал ответ Whizzle, если бы мог, но счел полезным отметить, что для решения этой проблемы в контексте многооконного режима в Android N мне нужно было немного изменить код так:
Это позволяет изменить размер макета, чтобы он был меньше максимальной высоты, но также не позволяет ему быть больше максимальной высоты. Я использовал этот класс макета, который переопределяет,
RelativeLayout
и это позволило мне создать собственный диалог сScrollView
дочерним элементомMaxHeightRelativeLayout
, который не расширяет всю высоту экрана, а также сжимается, чтобы соответствовать наименьшему размеру вдовы в мультиокне для Android Н.источник
Нет способа установить maxHeight. Но вы можете установить высоту.
Для этого вам понадобится определить высоту каждого элемента вашего scrollView. После этого просто установите высоту scrollView на numberOfItens * heightOfItem.
Чтобы узнать высоту предмета, сделайте это:
Чтобы установить высоту, сделайте это:
источник
Оберните
ScrollView
вашу равнинуLinearLayout
с layout_height = "max_height", это отлично подойдет. На самом деле, у меня есть этот код в производстве за последние 5 лет с нулевыми проблемами.источник
Мой
MaxHeightScrollView
пользовательский видstyle.xml
С помощью
источник
У меня есть ответ здесь:
https://stackoverflow.com/a/29178364/1148784
Просто создайте новый класс, расширяющий ScrollView, и переопределите его
onMeasure
метод.источник
Как упомянуто выше, ConstraintLayout предлагает максимальную высоту для своих детей через:
Кроме того, если максимальная высота для одного дочернего элемента ConstraintLayout остается неопределенной до запуска приложения, все еще есть способ заставить этого дочернего элемента автоматически адаптировать изменяемую высоту независимо от того, где он был расположен в вертикальной цепочке.
Например, нам нужно показать нижний диалог с изменяемым заголовком TextView, изменяемым ScrollView и изменяемым нижним колонтитулом TextView. Максимальная высота диалога составляет 320 dp ,, когда общая высота не достигает 320dp. ScrollView действует как wrap_content, когда общая высота превышает ScrollView, действует как «maxHeight = 320dp - высота заголовка - высота нижнего колонтитула».
Мы можем добиться этого только с помощью файла макета XML:
Большая часть кода импорта короткая:
Максимальное использование по горизонтали - то же самое.
источник
Вы пытались использовать значение layout_weight ? Если вы установите для него значение больше 0, это растянет это представление на оставшееся свободное место.
Если у вас было несколько видов, которые нужно было растянуть, то значение станет весом между ними.
Таким образом, если бы у двух представлений было установлено значение layout_weight, равное 1, они оба растянулись бы, чтобы заполнить пространство, но оба растянулись бы до равного пространства. Если вы установите один из них в значение 2, то он будет растягиваться вдвое больше, чем другой вид.
Некоторая дополнительная информация здесь перечислена под Линейной Компоновкой.
источник
maxHeight
которое я могу установить для определенного значения падения. (Я наконец-то закончил вычислять и устанавливать высоты программно)я думаю, вы можете установить heiht во время выполнения для 1 предмета просто
scrollView.setHeight(200px)
, для 2 предметовscrollView.setheight(400px)
для 3 или болееscrollView.setHeight(600px)
источник
Как мы знаем, устройства под управлением Android могут иметь разные размеры экрана. Как мы далее знаем, представления должны динамически корректироваться и становиться подходящим пространством.
Если вы установите максимальную высоту, вы можете заставить вид не получить достаточно места или занять меньше места. Я знаю, что иногда кажется, что практически установить максимальную высоту. Но если разрешение когда-либо резко изменится, и оно изменится !, то представление с максимальной высотой будет выглядеть неуместно.
Я думаю, что нет правильного способа сделать макет, который вы хотите. Я бы порекомендовал вам продумать макет, используя менеджеры макетов и соответствующие механизмы. я не знаю, чего вы пытаетесь достичь, но для меня немного странно, что список должен содержать только три элемента, а затем пользователь должен прокрутить.
Кстати. minHeight не гарантируется (и, возможно, не должно существовать). это может иметь некоторое преимущество, чтобы заставить элементы быть видимыми, в то время как другие относительные элементы становятся меньше.
источник
Если кто-то рассматривает возможность использования точного значения для LayoutParams, например
Не забудьте принять во внимание плотность отображения устройства, иначе вы можете получить очень странное поведение на разных устройствах. Например:
источник
Сначала получите высоту элемента в пикселях
тогда просто
источник
если вы, ребята, хотите сделать прокрутку без просмотра или просмотр списка без переполнения, просто используйте RelativeLayout с видом сверху и снизу сверху и снизу:
источник
Я использовал собственный ScrollView, сделанный в Kotlin, который использует
maxHeight
. Пример использования:Вот код
ScrollViewWidthMaxHeight
:который также нуждается в этой декларации в
values/attrs.xml
:источник