26

私は数週間 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 のソースを調べて、「制約が矛盾している」理由について考えられる理由を見つけようとしましたが、それを理解することができませんでした。

これらのメッセージが表示されるという事実は、私が気にする必要があることですか? レイアウトの仕方に問題は見当たりません。ViewPager のページとして読み込まれる Fragments に GridLayout があるため、ユーザーがページ間をスクロールすると、LogCat で上記の出力が複数回表示されます。

4

4 に答える 4

14

GridLayoutソースから:

Bellman-Ford バリアント - 通常の実行時間を からO(N^2)に短縮するように変更O(N)

GridLayout は、その要件を次の形式の線形制約のシステムに変換します。

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

は変数x[i]で、a[k]は定数です。

たとえば、変数が代わりにラベル付けされた場合、xyのようになりますz

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

O(n^2)これは線形計画問題の特殊なケースであり、ベルマンフォード アルゴリズムが最も一般的に使用される一般的な解である有向グラフの単一ソース最短経路問題と同等です。

solve線形計画法を使用して、構成が与えられたときに満たさなければならない制約の一貫性を保証する方法があります。制約に関連付けられている構成を特定しx5 - x4 < 221て削除すると、おそらくレイアウトのパフォーマンスを向上させることができます。そうすれば、ソルバーは満足できないことを解決してそれ自体を削除する必要がなくなります。

于 2014-01-21T17:17:40.170 に答える
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>

次に、GridLayout と XML 名前空間との互換性によって使用される属性のプレフィックスも変更されました。

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

そしてそれは役に立ちました...あなたにも役立つことを願っています。

于 2012-05-21T14:47:37.043 に答える
0

私にとっては、GridLayout を使用してカスタム ビューを作成していました。

問題は、グリッドの列数を xml 内に設定できると思ったことです。

次のようなレイアウト XML がありました。

<merge xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"

        app:alignmentMode="alignMargins"
        app:columnCount="9"
        app:columnOrderPreserved="true"
        tools:ignore="HardcodedText"
        app:orientation="horizontal"
        tools:parentTag="androidx.gridlayout.widget.GridLayout"
        app:rowOrderPreserved="true">

        ...

</merge>

残念ながら、カスタム レイアウトではこの方法は機能しません。これらのすべての属性を namespaceappで指定する必要がありました。カスタム ビューでは次のようにします。

class SimpleCalculatorView(context: Context, attrs: AttributeSet?): GridLayout(context, attrs) {

  init {
    ...

    View.inflate(context, R.layout.view_simple_calculator, this)
    columnCount = 9
    columnOrderPreserved = true
    rowOrderPreserved = true
    orientation = HORIZONTAL
}

これを行った後、エラーが発生しなくなりました。

編集

話すのが早すぎました。エラーが再び発生し、モーション レイアウトでカスタム レイアウトをアニメーション化するたびにエラーが発生し始めました。

于 2020-06-19T23:34:50.720 に答える