Как изменить высоту макета в зависимости от положения дочерних видов

#android #android-layout

#Android #android-макет

Вопрос:

У меня есть LinearLayout, который имеет дочерние представления. Дочерние представления располагаются друг над другом, потому что ориентация родительского макета вертикальная. Все дочерние элементы имеют свою высоту и ширину wrap_content, поэтому они свободно перемещаются в любом месте родительского макета. Пользователь может перемещать представления и удалять их по своему усмотрению. Когда пользователь удаляет представление, высота родительского макета изменяется. Пока мой код работает хорошо.

Но когда пользователь перемещает одно представление в сторону другого представления, я бы хотел, чтобы родительский макет изменял его высоту так же, как если бы пользователь удалил представление. Я попытался получить высоту родительского элемента и вычесть расстояние, на которое переместился дочерний элемент, и перерисовать макет, но это не сработало. Я также пробовал другие способы, но пока не добился успеха. Кто-нибудь может мне помочь?

Ответ №1:

Вы можете использовать GridView для вашего случая, где вы можете установить количество столбцов ( android:numColumns ) равным 1, при выравнивании по вертикали и при перемещении в сторону сделайте его равным 2.

Вот документация о том, как использовать GridView https://developer.android.com/guide/topics/ui/layout/gridview.html

 <GridView android:id="@ id/grid_view"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:layout_gravity="top"
           android:layout_margin="10dp"
           android:horizontalSpacing="10dp"
           android:numColumns="2"
           android:verticalSpacing="10dp" />