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.

Cualquier ayuda sería muy apreciada.

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.

https://stackoverflow.com/a/20154562/777165

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); 
  • Drop-menu en ListView para Android
  • ¿Cómo actualizar SeekBar no disparar OnSeekBarChangeListener?
  • Obtener la latitud y la longitud basadas en ciudad, zip o nombre de calle
  • Efecto extraño con ImageView startAnimation en ListView
  • RemoteViews para la actualización de widget supera el error máximo de uso de memoria de mapa de bits
  • Múltiples tamaños de widgets
  • ViewPager vacío se bloquea con PagerTabStrip
  • Android: alinear el centro LinearLayout para todos los tamaños de pantalla
  • Poner muro de facebook en Android
  • Establecer widget de la Galería de Android para mostrar la imagen de inicio específica
  • Pintura a mano libre no funciona correctamente?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.