4

getView() メソッドで膨らませたビューの高さと幅を取得しています。グリッドアイテムです。

通常、レイアウトにアタッチされた後、ビューで post() を使用してサイズを取得します。しかし、それは 0 を返します。

final View convertViewFinal = convertView;
convertView.post(new Runnable() {
    @Override
    public void run() {
        doSomethingWithConvertView(convertViewFinal);
    }
});

...

doSomethingWithConvertView(View v) {v.getWidth(); /*returns 0*/};

サイズを取得するにはどうすればよいですか?

4

3 に答える 3

1

viewTreeObserver の使用は間違いなく機能しますが、アクティビティのビューから実行可能なものを使用すると、膨張したビューで測定要件を確実に呼び出すことができることがわかりました。すなわち

someActivityInstance.getWindow().getDecorView().post(new Runnable() {
    @override
    public void run() {
        // someMeasurements
    }
});
于 2014-02-27T15:31:00.493 に答える
0

おそらく、レイアウト測定の前に実行されるメソッド onCreate または onStart または onResume でこれを呼び出しています。しかし、多くの回避策があります。これは 1 つの良いオプションです。

ViewTreeObserver vto = rootView.getViewTreeObserver();
        vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            public void onGlobalLayout() {
                v.getWidth();//already measured...
            }
        });

rootView は、必要な幅よりも高いレベルの任意の viewGroup である可能性があります。ただし、このリスナーは複数回実行される可能性があることに注意してください。

于 2012-08-08T16:53:31.523 に答える
0

問題は、ほとんどの場合、convertview は電話画面にまだ描画されていないため、準備が整うまで待つ必要があるということです。

ビューがいつ描画されたかを正確に知るには、ViewTreeObserver を使用する必要があります。

詳細については、この回答を確認してください: ビューを最初に測定できるのはいつですか?

于 2012-08-08T16:52:07.957 に答える