GridLayout吐出"不一致约束"调试级日志

mdu*_*pls 24 android grid-layout android-layout

我已经使用GridLayout几个星期了,当我打电话时我注意到了

gridLayout.requestLayout()
Run Code Online (Sandbox Code Playgroud)

它在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. 
Run Code Online (Sandbox Code Playgroud)

我查看了GridLayout的来源,试图找出可能的原因,为什么"约束不一致",但我无法弄明白.

这些消息出现的事实 - 这是我应该关注的事情吗?我认为事情的布局没有任何问题.我在Fragments中有一个GridLayout作为ViewPager中的页面加载,所以当用户在LogCat中多次看到上面输出的页面之间滚动时.

Dan*_*son 13

GridLayout来源:

Bellman-Ford变体 - 经过修改,可将典型的运行时间缩短O(N^2)O(N)

GridLayout将其需求转换为具有以下形式的线性约束的系统:

x[i] - x[j] < a[k]
Run Code Online (Sandbox Code Playgroud)

哪里x[i]是变量而且a[k]是常量.

例如,如果变量而不是标记x,y,z我们可能有:

x - y < 17
y - z < 23
z - x < 42
Run Code Online (Sandbox Code Playgroud)

这是线性规划问题的一个特例,它反过来相当于有向图上的单源最短路径问题,O(n^2)Bellman-Ford算法是最常用的通用解决方案.

它有一种solve方法,使用线性编程来保证它必须满足的约束的一致性,给定其配置.如果您确定哪个配置与约束关联并将其x5 - x4 < 221删除,则可以提高布局性能.然后解算器将不必解决它无法满足并自行删除它.


Tom*_*lek 5

我有同样的问题,我发现我错过了添加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>
Run Code Online (Sandbox Code Playgroud)

然后将兼容性GridLayout使用的属性前缀更改为XML命名空间:

<ImageButton android:id="@+id/btnSentence"
    grid:layout_row="0"
    grid:layout_column="0"
    ...
/>
Run Code Online (Sandbox Code Playgroud)

它帮了...希望它也能帮助你.