Как кажется, GridLayout всегда будет подталкивать своих дочерних элементов к макету, соответствующему их потребностям. например, следующее объявление:
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnCount="3"
android:orientation="vertical"
android:rowCount="4"
android:useDefaultMargins="true" >
...
<ImageView
android:id="@+id/main_image"
android:layout_column="1"
android:layout_columnSpan="2"
android:layout_row="3"
android:scaleType="fitStart" />
</GridLayout>
GridLayout объявляет fill_parent, и поэтому я ожидаю, что он не переполнится. GridLayout должен принимать размер родительского элемента, который в данном случае является окном (полная высота). Однако в средстве просмотра иерархии GridLayout устанавливается как Wrap_content как для вертикального, так и для горизонтального.
Таким образом, ImageView (который представляет собой большое изображение) или любое текстовое представление будет выдвигаться, чтобы подогнать себя под себя и, как таковое, переполнит контейнер.
Это можно увидеть в средстве просмотра иерархии, где представление сетки контейнера соответствует родительскому элементу:
при переполнении изображения
Читая документацию, я понимаю, что необходимо установить гравитацию. Насколько я могу судить, я использовал все виды параметров гравитации и масштабирования изображения без особого эффекта. Удаление полей с помощью useDefaultMargins="false"
меняет переполнение макета, что приводит к проблеме в сетке.
Мой вопрос следующий:
- Это ошибка или я неправильно использую GridLayout
- Как я могу заставить детей GridLayout уместить свой контейнер и заполнить
оставшиеся пробелы