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, несколько раз.
Ответы
Ответ 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
, я думаю, что это еще одно ограничение для беспокойства.