¿Cómo puedo obtener el ancho y alto de un diseño lineal que se define en xml como fill_parent tanto en altura como en ancho? He probado el método de medición, pero no sé por qué no da el valor exacto. Necesito estos valores en una actividad antes de que el método oncreate termine.obtener la altura y el ancho del diseño en tiempo de ejecución android
Respuesta
Supongamos que tengo para conseguir un ancho LinearLayout
definido en XML. Tengo que obtener una referencia de esto por XML. Defina LinearLayout
l
como instancia.
l = (LinearLayout)findviewbyid(R.id.l1);
ViewTreeObserver observer = l.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// TODO Auto-generated method stub
init();
l.getViewTreeObserver().removeGlobalOnLayoutListener(
this);
}
});
protected void init() {
int a= l.getHeight();
int b = l.getWidth();
Toast.makeText(getActivity,""+a+" "+b,3000).show();
}
callfragment();
}
¡Ten en cuenta! No le dará valores antes de los finales de Create. Aunque lo llamé dentro del método Create, su método de anulación se llamará tarde. Por lo tanto, puede parecer que su aplicación va lenta, pero resuelve mi propósito. – MGDroid
Los valores de ancho y alto se establecen una vez que se ha creado la disposición, cuando se han colocado los elementos se miden. En la primera llamada a onSizeChanged, los parms serán 0, por lo tanto, si usa ese control para ello.
poco más de detalle aquí https://groups.google.com/forum/?fromgroups=#!topic/android-developers/nNEp6xBnPiw
y aquí http://developer.android.com/reference/android/view/View.html#Layout
Aquí es cómo utilizar OnLayout:
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int width = someView.getWidth();
int height = someView.getHeight();
}
Se podría añadir el cambio de diseño oyente a su disposición y obtener la altura y la anchura más reciente o incluso el penúltimo cambio.
Agregado en el nivel de la API 11
Añadir un oyente que se llamará cuando los límites del cambio de vista debido al proceso de diseño.
LinearLayout myLinearLayout = (LinearLayout) findViewById(R.id.my_linear_layout);
myLinearLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
// Preventing extra work because method will be called many times.
if(height == (bottom - top))
return;
height = (bottom - top);
// do something here...
}
});
Para conseguir que funcione, es necesario comprobar si el valor de la altura deseada es mayor que 0 - primero y luego eliminar el oyente onGlobalLayout y hacer lo que quiera con la altura. El oyente llama a su método continuamente y por la primera llamada no se garantiza que la vista se mida correctamente.
final LinearLayout parent = (LinearLayout) findViewById(R.id.parentView);
parent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int availableHeight = parent.getMeasuredHeight();
if(availableHeight>0) {
parent.getViewTreeObserver().removeGlobalOnLayoutListener(this);
//save height here and do whatever you want with it
}
}
});
Esto hizo el truco - gracias. La llamada de eliminación de escucha está obsoleta desde el nivel 16 de la API. En esta publicación se describe cómo admitir la llamada para las API anteriores y posteriores http://stackoverflow.com/a/23741481/2162226 – gnB
- 1. ¿Es posible cambiar el ancho y la altura del diseño en Android en tiempo de ejecución?
- 2. ¿Cómo obtener la altura y el ancho del dispositivo en tiempo de ejecución?
- 3. altura completa y el diseño CSS ancho
- 4. ¿Cómo puedo calcular la altura y el ancho de la pantalla en tiempo de ejecución?
- 5. cómo cambiar la altura y el ancho del diseño del marco de forma programática?
- 6. ViewSwitcher altura y el diseño de Android
- 7. XNA: obtener el ancho y la altura de la pantalla
- 8. Obtener el ancho de la pantalla y la altura
- 9. Obtener la altura y el ancho de la imagen PHP
- 10. Usercontrol anchura de tiempo de ejecución y la altura
- 11. Cómo determinar el ancho y la altura del video en Android
- 12. Android ImageView ScaleType y altura del elemento
- 13. PHP: ¿Cómo obtener el ancho del archivo .dcr de la onda de choque y la altura?
- 14. Cambiar el ancho y la altura del control deslizante jQuery
- 15. Ejecución del código de tiempo en Android
- 16. Especifique el ancho y la altura del gráfico
- 17. ¿Cómo eliminar la altura y el ancho?
- 18. Android - Cambiar diseño de fragmento en tiempo de ejecución
- 19. UIImageView cambiar el ancho y la altura
- 20. Cómo cambiar el ancho y la altura del botón en Android
- 21. GLFW ¿obtener altura/ancho de pantalla?
- 22. Totalmente harto de obtener la altura y el ancho del widget Gtk
- 23. cómo obtener entrada del usuario en el tiempo de ejecución
- 24. ¿Cómo obtener la altura del texto con ancho fijo y obtener la longitud del texto que cabe en un marco?
- 25. Cambiar la altura y el ancho de TextArea en codemirror
- 26. Configuración de la altura del elemento en el diseño receptivo?
- 27. ¿Hay alguna forma de obtener la altura y el ancho de la barra de desplazamiento?
- 28. ASP.NET: obtenga la altura y el ancho de una imagen
- 29. Android: ¿Cómo obtener una altura y ancho personalizados de la Vista?
- 30. Creación/uso del diseño generado en tiempo de ejecución XML en Android
IIRC no se puede obtener el alto/ancho de cualquier cosa antes de que se haya medido. Se le ha asignado cuando se ha llamado a onSizeChanged, si anula el enunciado, todas las vistas deben tener un alto y ancho – tom502
@ tom502 ¿me puede dar un enlace o un fragmento de código? Será de gran ayuda. – MGDroid