Android
Berechnete Ansichtsmaße erhalten
Suche…
Bemerkungen
Beachten Sie, dass eine ViewTreeObserver
Instanz, die einer View
Instanz zugeordnet ist, ungültig werden kann, solange diese View
noch aktiv ist. In den View.getViewTreeObserver
Javadocs:
// The returned ViewTreeObserver observer is not guaranteed to remain
// valid for the lifetime of this View. If the caller of this method keeps
// a long-lived reference to ViewTreeObserver, it should always check for
// the return value of {@link ViewTreeObserver#isAlive()}.
Wenn Sie also zuvor einer ViewTreeObserver
Instanz einen Listener hinzugefügt haben und nun entfernen möchten, können Sie getViewTreeObserver
für die entsprechende View
Instanz erneut ViewTreeObserver
, um eine neue ViewTreeObserver
Instanz zu erhalten. (Das Überprüfen von isAlive
für eine vorhandene Instanz ist mehr Arbeit für wenig Nutzen; wenn der ViewTreeObserver
nicht mehr aktiv ist, erhalten Sie diese neue Referenz trotzdem!)
Berechnung der anfänglichen Bemaßungsansicht in einer Aktivität
package com.example;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;
import android.view.ViewTreeObserver;
public class ExampleActivity extends Activity {
@Override
protected void onCreate(@Nullable final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_example);
final View viewToMeasure = findViewById(R.id.view_to_measure);
// viewToMeasure dimensions are not known at this point.
// viewToMeasure.getWidth() and viewToMeasure.getHeight() both return 0,
// regardless of on-screen size.
viewToMeasure.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
// viewToMeasure is now measured and laid out, and displayed dimensions are known.
logComputedViewDimensions(viewToMeasure.getWidth(), viewToMeasure.getHeight());
// Remove this listener, as we have now successfully calculated the desired dimensions.
viewToMeasure.getViewTreeObserver().removeOnPreDrawListener(this);
// Always return true to continue drawing.
return true;
}
});
}
private void logComputedViewDimensions(final int width, final int height) {
Log.d("example", "viewToMeasure has width " + width);
Log.d("example", "viewToMeasure has height " + height);
}
}
Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow