Android
Obtención de dimensiones de vista calculadas
Buscar..
Observaciones
Tenga en cuenta que una instancia de ViewTreeObserver
asociada con una instancia de View
puede dejar de ser válida mientras esa View
aún esté activa. Desde el View.getViewTreeObserver
View.getViewTreeObserver:
// 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()}.
Por lo tanto, si anteriormente ha agregado un servicio de escucha a una instancia de ViewTreeObserver
y ahora desea eliminarlo, es más fácil llamar a getViewTreeObserver
en la instancia de View
correspondiente para recibir una instancia nueva de ViewTreeObserver
. (Verificación de isAlive
en una instancia existente es más trabajo para un pequeño beneficio; si ViewTreeObserver
ya no está activo, ¡de todos modos obtendrá esa nueva referencia!)
Cálculo de dimensiones iniciales de vista en una actividad
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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow