2012-09-10 4 views
13

Ich muss ImageView Breite und Höhe wissen. Gibt es eine Möglichkeit, es in Fragmenten zu messen? Im Standard-Aktivität verwende ich diese:Ansicht in Fragment messen

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

Aber wo kann ich image.getWidth(); und image.getHeight(); in Fragmente verwenden?

Antwort

24

Verwenden Sie die GlobalLayoutListener. Sie weisen den Hörer zu Ihrem ImageView in onCreateView() genau wie Sie in dieser Antwort in den Link tun. Es ist auch zuverlässiger als onWindowFocusChanged() für die Hauptaktivität, also empfehle ich Wechselstrategien.

EDIT

Beispiel:

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

zu dieser Antwort hinzuzufügen ... Ich habe versucht, diese Schnipsel zu verwenden, um die Breite und Höhe für eine Imageview in einem Fragment von ActionBar Tab Hörer angezeigt zu bekommen . (Mit support.V4 api, Targeting API14 +) Ich musste das Snippet in die "onViewCreated" -Methode (?) Platzieren, um Ergebnisse zu erhalten. Tatsächlich in 'onCreateView' war das testView-Objekt null, View nicht gefunden, und dies verursachte eine Ausnahme. – user2238983

+0

Sie sollten es jedoch auf die Ansicht anwenden können, die Sie in onCreateView zurückgeben. Der Grund, warum NULL zurückgegeben würde, wäre, weil 'profileContainer' noch nicht existiert. – DeeV

+1

Was sind profilePadding und profileContainer Typen? –