Obter as dimensões da tela em pixels

Eu criei alguns elementos personalizados, e quero programá-los para o canto superior direito (n pixels from the top edge e m pixels from the right edge). Portanto, preciso obter a largura e altura da tela e depois definir a posição:

int px = screenWidth - m;
int py = screenHeight - n;

Como obter "largura de tela" e "altura de tela" na atividade principal?

Solução

Se você quiser as dimensões de exibição em pixels você pode utilizar getSize':

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

Se você não estiver em uma Atividade você pode obter o Display padrão via WINDOW_SERVICE:

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();

Se você estiver em um fragmento e quiser realizar isso basta usar Activity.WindowManager (em Xamarin.Android) ou getActivity().getWindowManager() (em java).

Antes de 'getSize' ser introduzido (no nível 13 da API), você podia utilizar os métodos 'getWidth' e 'getHeight' que agora são depreciados:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();  // deprecated
int height = display.getHeight();  // deprecated

Para o caso de uso que você está descrevendo, no entanto, uma margem/padding no layout parece mais apropriado.

Outra maneira é: DisplayMetrics.

Uma estrutura que descreve informações gerais sobre uma tela, como tamanho, densidade e escala de fontes. Para acessar os membros da DisplayMetrics, inicialize um objeto como este:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

Podemos utilizar o widthPixels para obter informações:

"A largura absoluta do visor em pixels."

Exemplo:

Log.d("ApplicationTagName", "Display width in px is " + metrics.widthPixels);
Comentários (25)

Uma maneira é:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();
int height = display.getHeight();

É depreciado, e você deve tentar o seguinte código. As duas primeiras linhas de código dão-lhe o objecto DisplayMetrics'. Estes objetos contêm os campos comoheightPixels,widthPixels`.

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

int height = metrics.heightPixels;
int width = metrics.widthPixels;
Comentários (10)

Primeiro obtenha view (por exemplo, por findViewById()) e então você pode utilizar getWidth() na própria view.

Comentários (2)