Creé algunos elementos personalizados y quiero colocarlos mediante programación en la esquina superior derecha ( n
píxeles desde el borde superior ym
píxeles desde el borde derecho). Por lo tanto, necesito obtener el ancho y la altura de la pantalla y luego establecer la posición:
int px = screenWidth - m;
int py = screenHeight - n;
¿Cómo llego screenWidth
y screenHeight
en la Actividad principal?
getMetrics
. El comentario de Nik en su respuesta incluso explicagetDisplayMetrics
considerar el tamaño del sistema / barra de estado. También puede usar densidad como jmaculate y LoungeKatt explicó que tiene el valor EXACTO :DisplayMetrics dm = getResources().getDisplayMetrics(); float fwidth = dm.density * dm.widthPixels;
Probado en Android v2.2 (API 8) y v4.0 con buenos resultados y sin errores / advertencias .Resources.getSystem().getDisplayMetrics()
. No necesitarás unContext
para conseguirlos.Respuestas:
Si desea las dimensiones de visualización en píxeles, puede usar
getSize
:Si no está en un
Activity
puede obtener el valor predeterminado aDisplay
través deWINDOW_SERVICE
:Si está en un fragmento y quiere lograr esto, simplemente use Activity.WindowManager (en Xamarin.Android) o getActivity (). GetWindowManager () (en java).
Antes de que
getSize
se introdujera (en el nivel 13 de la API), podría usar los métodosgetWidth
ygetHeight
que ahora están en desuso:Sin embargo, para el caso de uso que está describiendo, un margen / relleno en el diseño parece más apropiado.
Otra forma es: DisplayMetrics
Podemos utilizar
widthPixels
para obtener información para:Ejemplo:
fuente
try/catch
para tal cheque. ¿Por qué no simplemente usarif (android.os.Build.VERSION.SDK_INT >= 13)
sin ninguna excepción lanzada? Piensotry/catch
en un flujo normal de aplicaciones como una mala práctica.Una forma es:
Está en desuso y, en su lugar, debe probar el siguiente código. Las dos primeras líneas de código te dan los
DisplayMetrics
objetos. Este objeto contiene los campos comoheightPixels
,widthPixels
.fuente
Puede que no responda su pregunta, pero podría ser útil saber (lo estaba buscando yo mismo cuando llegué a esta pregunta) que si necesita una dimensión de Vista pero su código se está ejecutando cuando su diseño aún no se ha establecido (por ejemplo, en
onCreate()
) puede configurar unViewTreeObserver.OnGlobalLayoutListener
conView.getViewTreeObserver().addOnGlobalLayoutListener()
y poner el código relevante que necesita la dimensión de la vista allí. Se llamará a la devolución de llamada del oyente cuando se haya diseñado el diseño.fuente
View.post()
no está garantizado que funcione? Tengo curiosidad porque también confío en este método para obtener el tamaño de una Vista después del diseño y no sabía que no era confiable.View
dónde obtengasViewTreeObserver
? ¿O todos comparten el mismo?(Respuesta de 2012, puede estar desactualizada) Si desea admitir la versión anterior de Honeycomb, necesitará una compatibilidad con versiones anteriores antes de la API 13. Algo así como:
Por supuesto, los métodos obsoletos se eliminarán de los SDK más recientes, pero si bien confiamos en que la mayoría de nuestros usuarios tengan Android 2.1, 2.2 y 2.3, esto es lo que nos queda.
fuente
He intentado todas las "soluciones" posibles sin éxito y me di cuenta de que la aplicación "Dalvik Explorer" de Elliott Hughes siempre muestra la dimensión correcta en cualquier dispositivo Android / versión del sistema operativo. Terminé mirando su proyecto de código abierto que se puede encontrar aquí: https://code.google.com/p/enh/
Aquí está todo el código relevante:
EDITAR: versión ligeramente mejorada (evite las excepciones de disparo en la versión de SO no compatible):
fuente
La forma más simple:
fuente
Para acceder a la altura de la barra de estado para dispositivos Android, preferimos una forma programática para obtenerlo:
Código de muestra
La variable
result
da la altura en el píxel.Para un acceso rápido
Para obtener más información sobre la altura de
Title bar
,Navigation bar
yContent View
, por favor, mire los tamaños de pantalla del dispositivo Android .fuente
getResources().getDisplayMetrics().heightPixels + result
da la altura real de pantalla completa. La respuesta de Dragan Marjanović también funciona, pero prefiero esta solución mucho más corta y simple.OnApplyWindowInsetsListener
.Primero obtenga la vista (por ejemplo, by
findViewById()
) y luego puede usar getWidth () en la vista misma.fuente
Tengo dos funciones, una para enviar el contexto y la otra para obtener el alto y el ancho en píxeles:
y
fuente
@SuppressLint("NewApi")
justo encima de la firma de la función para poder compilar.Para escalar dinámicamente usando XML hay un atributo llamado "android: layout_weight"
El siguiente ejemplo, modificado a partir de la respuesta de synic en este hilo , muestra un botón que ocupa el 75% de la pantalla (peso = .25) y una vista de texto que ocupa el 25% restante de la pantalla (peso = .75).
fuente
Este es el código que uso para la tarea:
Parece lo suficientemente limpio y, sin embargo, se encarga de la degradación.
fuente
¿No es esta una solución mucho mejor? DisplayMetrics viene con todo lo que necesita y funciona desde la API 1.
También puede obtener la visualización real (incluidas las decoraciones de pantalla, como la barra de estado o la barra de navegación del software) usando getRealMetrics , pero esto funciona solo en 17+.
¿Me estoy perdiendo de algo?
fuente
Solo agrego a la respuesta de Francesco. El otro observador que es más apto, si desea averiguar la ubicación en la ventana o la ubicación en la pantalla, es ViewTreeObserver.OnPreDrawListener ()
Esto también se puede utilizar para encontrar otros atributos de una vista que es desconocida en su mayoría en el momento onCreate (), por ejemplo, la posición desplazada, la posición escalada.
fuente
Usando el siguiente código en Actividad.
fuente
Encuentra el ancho y la altura de la pantalla:
Con esto, podemos obtener el SDK 13 más reciente y superior.
fuente
fuente
Encontré que esto hizo el truco.
fuente
Es necesario decir que si no está en
Activity
, pero enView
(o tiene una variable deView
tipo en su alcance), no es necesario usarWINDOW_SERVICE
. Entonces puedes usar al menos dos formas.Primero:
Segundo:
Todos estos métodos que llamamos aquí no están en desuso.
fuente
fuente
Para obtener las dimensiones de la pantalla, utilice metrices de visualización
Obtenga la altura y el ancho en píxeles
fuente
Esta no es una respuesta para el OP, ya que quería las dimensiones de la pantalla en píxeles reales. Quería las dimensiones en "píxeles independientes del dispositivo", y reuniendo las respuestas desde aquí https://stackoverflow.com/a/17880012/253938 y aquí https://stackoverflow.com/a/6656774/253938 se me ocurrió con este:
fuente
Puede obtener el tamaño de altura usando:
y el tamaño del ancho usando
fuente
Hay una forma no obsoleta de hacer esto usando DisplayMetrics (API 1), que evita el desorden try / catch:
fuente
Envolvería el código getSize de esta manera:
fuente
Para quién está buscando una dimensión de pantalla utilizable sin la Barra de estado y la Barra de acción (también gracias a la respuesta de Swapnil):
fuente
Primero cargue el archivo XML y luego escriba este código:
Muestra ancho y alto según la resolución de tu pantalla.
fuente
Siga los métodos a continuación:
fuente
Kotlin
fuente
Hay momentos en los que necesita conocer las dimensiones precisas del espacio disponible para un diseño cuando se encuentra en una actividad en el sitio. Después de pensarlo, resolví esta forma de hacerlo.
Si por alguna razón no desea agregar otra actividad al manifiesto de Android, puede hacerlo de esta manera:
fuente
Si no desea la sobrecarga de WindowManagers, Points o Displays, puede tomar los atributos de alto y ancho del elemento de vista superior en su XML, siempre que su altura y ancho estén configurados para emparejar_parente. (Esto es cierto siempre que su diseño ocupe toda la pantalla).
Por ejemplo, si su XML comienza con algo como esto:
Luego
findViewById(R.id.entireLayout).getWidth()
devolverá el ancho de la pantalla yfindViewById(R.id.entireLayout).getHeight()
devolverá la altura de la pantalla.fuente