2

実行時にAndroid を拡張する myのheightとを次のように変更しています。widthCustomViewView

        @Override
        public void onGlobalLayout() {          
            if(!initialized) {          
                int containerHeight = instance.getHeight();
                int containerWidth = instance.getWidth();
                myView.getLayoutParams().height = (int) (containerHeight * HEIGHT_RATIO);
                myView.getLayoutParams().width = (int) (containerWidth * WIDTH_RATIO);
                instance.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                initialized = true;
            }
        }

このコードはcontainer viewコンストラクターにあります。

さらに、私のCustomView onMeasure()は次のとおりです。

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // maximum width we should use
        int width = MeasureSpec.getSize(widthMeasureSpec);
        int height = MeasureSpec.getSize(heightMeasureSpec);
        setMeasuredDimension(width, height);
    }

結果は次のとおりです。

ここに画像の説明を入力

widthと指定した場所はheight、緑色の長方形と同じサイズです。

私の質問は:カスタム ビュー (赤い四角形) の実際のサイズが、入力として指定したサイズと同じでないのはLayoutParamsなぜですか?

4

3 に答える 3

0

呼び出し時にサイズが正しく計算されない可能性があるため、コードをハンドラーに配置して post で実行し、UI スレッドの他のすべてが完了した後に完了するようにする必要がある場合があります。次のコードを試してください。

Handler handler = new Handler();
handler.post(new Runnable() {
    public void run() {
    //check sizes and update sizes here
    });
于 2015-03-07T18:12:28.303 に答える
0

ビューでどのオブジェクトを使用しているかはわかりませんが、次のようなことを試してみてください:

CustomViewget.Window().setLayout(370, 480); //幅と高さを制御

于 2013-03-29T21:37:06.900 に答える