36 votos

Incorrecta de la coordenadas getLocationOnScreen/getLocationInWindow

Una llamada a getLocationOnScreen() o getLocationInWindow() ambos me dan un top/Y de coordenadas que se acerca ~30px (estado/notificaciones de la barra de altura) demasiado lejos. El left/X de coordenadas está muerto.

Como mencioné anteriormente, yo creo que la diferencia es porque el estado y la barra de notificaciones... yo podría estar equivocado. Creo que puedo resolver esto si lo puede determinar el tamaño de la barra de notificaciones pero, estoy teniendo problemas para hacer precisamente eso.

Cualquier ayuda sería muy apreciada.

53voto

nimph Puntos 493

Terminé de resolver esta cuestión mediante la determinación de la altura de la barra de notificación de estado 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;

4voto

user330844 Puntos 366

Tengo el mismo problema, trate de usar

offset = myView.GetOffsetY();

y ajustar su coord Y por ese valor, por ejemplo

coordY -= offset;

La clase que ofrece la ''-método:

class MyView extends View {

  public int GetOffsetY() {
    int mOffset[] = new int[2];
    getLocationOnScreen( mOffset );
    return mOffset[1]; 
  }

}

4voto

groucho Puntos 588

Esta respuesta no incluye cómo obtener el estado de la altura de la barra, sino explicar el comportamiento de getLocationOnScreen() y getLocationInWindow() devolver el mismo valor.

En el caso de una actividad normal (no un cuadro de diálogo) usted debe esperar que estos dos métodos para devolver el mismo valor. Una Ventana que pone debajo (como en el orden-z no coordenadas) de la barra de estado, por lo que estos métodos no pueden utilizarse para determinar la altura de la barra de estado.

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

3voto

satur9nine Puntos 3901

Aquí es cómo quisiera obtener la altura de la barra de estado y ajustar el offset:

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);

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X