2012-09-10 23 views
13

Potrzebuję znać szerokość i wysokość ImageView. Czy istnieje sposób zmierzenia go w części? W standardowej działalności Używam tego:Zmierz widok w fragmencie

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    image.getWidth(); 
    image.getHeight(); 
} 

Ale gdzie mogę używać image.getWidth(); i image.getHeight(); w fragmencie?

Odpowiedz

24

Użyj GlobalLayoutListener. Przypisujesz słuchacza do swojej w onCreateView(), podobnie jak w tej odpowiedzi w linku. Jest również bardziej niezawodny niż w przypadku głównej aktywności, dlatego polecam strategie przełączania.

EDIT

Przykład:

final View testView = findViewById(R.id.view_id); 
ViewTreeObserver vto = testView.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
    Log.d("TEST", "Height = " + testView.getHeight() + " Width = " + testView.getWidth()); 
    ViewTreeObserver obs = testView.getViewTreeObserver(); 
    obs.removeGlobalOnLayoutListener(this); 
    } 
}); 
+0

Aby dodać do tej odpowiedzi ... Próbowałem użyć tego fragmentu kodu, aby uzyskać szerokość i wysokość dla ImageView we fragmencie wyświetlanej przez ActionBar Tab słuchacza . (Korzystając z API support.V4, targeting API14 +) musiałem umieścić fragment kodu w metodzie "onViewCreated" (?), Aby uzyskać wyniki. W rzeczywistości w "onCreateView" obiekt testView miał wartość NULL, nie znaleziono widoku, co spowodowało wyjątek. – user2238983

+0

Powinieneś być w stanie zastosować go do widoku, który zwrócisz w trybie onCreateView. Powodem, dla którego zwróci wartość null, byłoby to, że 'profileContainer' jeszcze nie istnieje. – DeeV

+1

Czym są typy profilePadding i profileContainer? –

Powiązane problemy