Подтвердить что ты не робот

GridLayout выплескивает журналы с отладочным уровнем "несовместимые ограничения"

Я использую GridLayout в течение нескольких недель, и я заметил, что когда я звоню

gridLayout.requestLayout()

он выдает следующее сообщение об уровне отладки в LogCat:

D/android.widget.GridLayout(14048): horizontal constraints: x5 - x0 > 1115, x5 - x4 < 221, x4 - x3 < 221, x3 - x2 < 221, x2 - x1 < 221, x1 - x0 < 221 are inconsistent; permanently removing: x5 - x4 < 221. 

Я просмотрел источник GridLayout, чтобы попытаться выяснить возможную причину того, почему "противоречия противоречивы", но я не смог понять это.

Тот факт, что эти сообщения появляются - это то, о чем я должен беспокоиться? Я не вижу никаких проблем с тем, как все складывается. У меня есть GridLayout во Фрагментах, которые загружаются как страницы в ViewPager, поэтому я, когда пользователь прокручивает страницы, которые я вижу выше в LogCat, несколько раз.

4b9b3361

Ответ 1

Из источника GridLayout:

Вариант Bellman-Ford - изменен для уменьшения типичного времени работы от O(N^2) до O(N)

GridLayout преобразует свои требования в систему линейных ограничений вида:

x[i] - x[j] < a[k]

Где x[i] - переменные, а a[k] - константы.

Например, если вместо переменных вместо x, y, z мы могли бы иметь:

x - y < 17
y - z < 23
z - x < 42

Это частный случай проблемы линейного программирования, который, в свою очередь, эквивалентен задаче кратчайших путей с одним источником на орграфе, для которого алгоритмом O(N^2) Bellman-Ford является наиболее часто используемое общее решение.

Он имеет метод solve, который использует линейное программирование, чтобы гарантировать согласованность ограничений, которые он должен удовлетворить, учитывая его конфигурацию. Вероятно, вы можете улучшить производительность макета, если выясните, какая конфигурация связана с ограничением x5 - x4 < 221 и удалите его. Тогда решателю не придется решать, что он не может быть удовлетворен и удалить его сам.

Ответ 2

У меня была такая же проблема, и я обнаружил, что я пропустил добавление пространства имен XML. Исправлено так:

<android.support.v7.widget.GridLayout 
     xmlns:grid="http://schemas.android.com/apk/res-auto"
     xmlns:android="http://schemas.android.com/apk/res/android">
...
</android.support.v7.widget.GridLayout>

Затем изменился префикс атрибутов, используемых для совместимости GridLayout с пространством имен XML:

<ImageButton android:id="@+id/btnSentence"
    grid:layout_row="0"
    grid:layout_column="0"
    ...
/>

и это помогло... Надеюсь, это тоже поможет.

Ответ 3

Я wrap_content проблему, используя wrap_content для ширины GridLayout вместо match_parent, я думаю, что это еще одно ограничение для беспокойства.