1

ViewGroup クラスを拡張して、独自のレイアウトをプログラミングしています。オーバーライドする必要があるメソッドの 1 つは onMeasure() メソッドです。このメソッドでは、親ビュー (私のレイアウトを含むビュー) は、私のレイアウトが持つことができる可能な幅と高さを渡します。

@Override
public class MyOwnLayout extends ViewGroup {

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        // Argumens passed by the parent View.
        // Can be both arguments be as MeasureSpec.UNSPECIFIED simultaneously ??
    }

}

この MeasureSpec 引数には、"EXACLY"、"AT_MOST"、"UNSPECIFIED" の 3 つのモードがあります (これらの意味はここにあります。具体的には、"UNSPECIFIED" 値は、レイアウトが必要な任意のサイズになる場合に親から渡されます。これは、たとえば、親が ScrollView の場合に指定されます。

したがって、私の唯一の疑問は、親が私のレイアウトに両方を同時に UNSPECIFIED として渡すことができるということです。可能であれば、どのような場合ですか?

4

1 に答える 1

1

両方向にスクロールするカスタム ビューを作成できます。UNSPECIFIEDこれは、高さと幅の両方で子を測定します(または測定できます) 。HorizontalScrollViewネストされた aScrollViewもこの動作を引き起こす可能性がありますが、お勧めしません。

通常、このケース (両方UNSPECIFIED) は発生しません。無視しなくても大丈夫なのかもしれません。しかし、技術的に正当な構成を無視することは、将来奇妙なバグを引き起こす良い方法であることがわかりました。可能であれば、このケースを自分で処理する必要がありonMeasureます。

于 2015-03-16T21:58:38.180 に答える