0

私のxmlでは、幅と高さの両方にwrap_contentを指定しましたが、onMeasure関数をオーバーライドすると、渡される幅と高さは-2147483348であり、奇妙なことに300> Integer.MIN_VALUEです。これには理由がありますか?integer.MIN_VALUEでないのはなぜですか、内部に何も入っていない場合は0です。ところで、これは私が作成しているカスタムビューなので、setMeasuredDimensionを実行する必要があると思います。

4

1 に答える 1

2

への引数onMeasureは、利用可能な幅と高さではなく、利用可能な幅と高さのエンコーディングと、それらの値の使用方法に関するフラグです。View.MeasureSpecクラスを使用してそれらをデコードします。

protected void onMeasure(int widthSpec, int heightSpec) {
    final int widthMode = MeasureSpec.getMode(widthSpec);
    final int widthSize = MeasureSpec.getSize(widthSpec);
    // etc.
}

モードはAT_MOSTEXACTLY、またはのいずれかになりUNSPECIFIEDます。これをどのように使用するかについては、ドキュメントを参照してください。特に、モードが でないUNSPECIFIED場合、 を呼び出すときに、その次元のサイズより大きい値を使用してはなりませんsetMeasuredDimension

于 2012-06-04T18:52:52.773 に答える