Coordenadas incorrectas de getLocationOnScreen / getLocationInWindow
Una llamada a getLocationOnScreen()
o getLocationInWindow()
me dan una coordenada top/Y
aproximadamente ~ 30px (altura de la barra de estado / notificaciones) demasiado abajo. La coordenada left/X
está muerta.
Como he sugerido anteriormente, creo que la diferencia es debido a la barra de estado / notificación … podría estar equivocado. Creo que puedo resolver esto si puedo determinar el tamaño de la barra de notificación pero, estoy teniendo problemas para hacer eso.
- Resaltar para el elemento seleccionado en la lista expandible
- Centrar los elementos de texto en ListView
- Cómo mostrar la tarjeta QuickContact desde el widget
- ¿Podemos limitar el número de caracteres en edittext de SearchView en Android?
- Obtener la información actual de onClickListener de un objeto de Android View
Cualquier ayuda sería muy apreciada.
- La función onGrado de RadioGroup no se disparará
- Inexplicable ClassCastException en android.widget.ProgressBar.onRestoreInstanceState
- Ejemplo de uso de pestañas de Android con Vistas en lugar de Actividades?
- Cambiar el tamaño de paso de un NumberPicker
- Por favor, ayuda con el botón de botón muy simple Android. Muy frustrado. :(
- Widget android en evento de clic
- Manejando ese molesto "java.lang.IndexOutOfBoundsException: getChars (5 ... 0) tiene fin antes de empezar" bug
- Actualización del widget de aplicación mediante AlarmManager
Terminé solucionando este problema determinando la altura de la barra del estado / de la notificación así:
View globalView = ...; // the main view of my activity/application DisplayMetrics dm = new DisplayMetrics(); this.getWindowManager().getDefaultDisplay().getMetrics(dm); int topOffset = dm.heightPixels - globalView.getMeasuredHeight(); View tempView = ...; // the view you'd like to locate int[] loc = new int[2]; tempView.getLocationOnScreen(loc); final int y = loc[1] - topOffset;
Estoy teniendo el mismo problema, intento usar
offset = myView.GetOffsetY();
Y ajustar su Y coord por ese valor, por ejemplo
coordY -= offset;
La clase que ofrece el método “ -method:
class MyView extends View { public int GetOffsetY() { int mOffset[] = new int[2]; getLocationOnScreen( mOffset ); return mOffset[1]; } }
Esta respuesta no incluye cómo obtener la altura de la barra de estado, sino que explica el comportamiento de getLocationOnScreen()
y getLocationInWindow()
devuelve el mismo valor.
En el caso de una actividad normal (no un diálogo) debe esperar que estos dos métodos devuelvan el mismo valor. Una ventana establece debajo de la barra de estado, por lo que estos métodos no se pueden utilizar para determinar la altura de la barra de estado.
Aquí es cómo me gusta obtener la altura de la barra de estado, y ajustar el desplazamiento:
final int[] location = new int[2]; anchor.getLocationInWindow(location); // Includes offset from status bar, *dumb* Rect anchorRect = new Rect(location[0], location[1], location[0] + anchor.getWidth(), location[1] + anchor.getHeight()); anchor.getRootView().findViewById(android.R.id.content).getLocationInWindow(location); int windowTopOffset = location[1]; anchorRect.offset(0, -windowTopOffset);