2012-05-02 10 views
21

Sto usando GridLayout per un paio di settimane e ho notato che quando chiamoGridLayout sputando "vincolo incoerente" i registri a livello di debug

gridLayout.requestLayout() 

sputa fuori il seguente messaggio a livello di debug in 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. 

ho guardato attraverso la fonte di GridLayout per cercare di scoprire la possibile ragione per cui i "vincoli sono incoerenti", ma non sono stato in grado di capirlo.

Il fatto che questi messaggi vengano visualizzati - è qualcosa di cui dovrei preoccuparmi? Non vedo alcun problema con il modo in cui le cose vengono presentate. Ho un GridLayout in Fragments che vengono caricati come pagine in un ViewPager in modo che io mentre l'utente scorre tra le pagine vedo l'output di cui sopra in LogCat più volte.

+0

Spero che ti sia utile https://stackoverflow.com/questions/37997670/gridlayout-vertical-horizontal-constraints-are-inconsistent?noredirect=1&lq=1 –

risposta

4

Ho avuto lo stesso problema e ho scoperto che mi mancava aggiungere spazio dei nomi XML. Corretto in questo modo:

<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> 

poi cambiato il prefisso di attributi utilizzati da GridLayout compatibilità con namespace XML troppo:

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

e mi ha aiutato ... Spero che ti aiuta troppo.

+0

Ho provato questo e sembra che abbia ancora lo stesso problema . Non sto usando la libreria di compatibilità - questa potrebbe essere la differenza. Grazie. – mdupls

10

Dal GridLayout fonte:

Bellman-Ford variante - modificato per ridurre il tempo tipico decorrono dalla O(N^2) a O(N)

GridLayout converte i requisiti in un sistema di vincoli lineari della forma:

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

Dove le x[i] sono variabili e le a[k] sono costanti.

Per esempio, se le variabili sono invece etichettati x, y, z potremmo avere:

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

Questo è un caso particolare del problema di programmazione lineare che è, a sua volta, equivalente al singolo fonte il problema dei percorsi più brevi su un digraph, per il quale l'algoritmo O(n^2) Bellman-Ford è la soluzione generale più comunemente utilizzata.

Ha un metodo solve che utilizza la programmazione lineare per garantire la coerenza dei vincoli che deve soddisfare, data la sua configurazione. Probabilmente è possibile migliorare le prestazioni del layout se si individua la configurazione associata al vincolo x5 - x4 < 221 e rimuoverla. Quindi il risolutore non dovrà risolvere il problema che non può essere soddisfatto e rimuoverlo da solo.

+4

Capire quale vincolo è la vera sfida ... –

Problemi correlati