Jak powiedział Jin35, problem polegał na tym, że szerokość i wysokość widoku nie zostały jeszcze obliczone ... wymiary nie są obliczane przed przejściem układu.
Użycie stałej szerokości i wysokości z zasobów wymiaru (np. Z pliku values / dimens.xml) jest jednym obejściem, ponieważ nie trzeba czekać na wystąpienie zdarzenia onMeasure - można uzyskać wartość z tego samego zasobu wymiaru, który był używany w widoku, który Cię interesuje, i użyj go.
Lepszym rozwiązaniem jest po prostu opóźnić obliczenia, aż do momentu, gdy zdarzy się zdarzenie. Można to zrobić poprzez nadpisanie onMeasure, ale bardziej eleganckim rozwiązaniem jest użycie tymczasowej OnGlobalLayoutListener takiego:
View popup = LayoutInflator.inflate(int resId);
if(popup != null) {
// set up an observer that will be called once the listView's layout is ready
android.view.ViewTreeObserver viewTreeObserver = listView.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
viewTreeObserver.addOnGlobalLayoutListener(new android.view.ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//Log.v(TAG, "onGlobalLayoutPondYouOldPoop");
// This will be called once the layout is finished, prior to displaying.
View popup = findViewById(resId);
if(popup != null) {
int width = popup.getMeasuredWidth();
int height = popup.getMeasuredHeight();
// don't need the listener any more
popup.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
}
});
}
}
jesteś w stanie dostać się do wymiarów Państwa zdanie po wywołaniu 'LayoutInflator.inflate (int resid, ViewGroup rodzic , attachToRoot boolean) '? –