Domanda Ottieni dimensioni dello schermo in pixel


Ho creato alcuni elementi personalizzati e desidero posizionarli programmaticamente nell'angolo in alto a destra (n pixel dal bordo superiore e m pixel dal bordo destro). Pertanto ho bisogno di ottenere la larghezza e l'altezza dello schermo e quindi impostare la posizione:

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

Come ottengo screenWidth e screenHeight nella principale attività?


1672
2018-06-19 08:25


origine


risposte:


Se si desidera utilizzare le dimensioni di visualizzazione in pixel getSize:

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

Se non sei in un Activity puoi ottenere il valore predefinito Display attraverso WINDOW_SERVICE:

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

Prima getSize è stato introdotto (nel livello API 13), è possibile utilizzare il getWidth e getHeight metodi che ora sono deprecati:

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

Per il caso d'uso che stai descrivendo, tuttavia, un margine / riempimento nel layout sembra più appropriato.

Un altro modo è: DisplayMetrics

Una struttura che descrive le informazioni generali su un display, come le dimensioni, la densità e il ridimensionamento dei caratteri. Per accedere ai membri di DisplayMetrics, inizializzare un oggetto come questo:

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

Possiamo usare widthPixels per ottenere informazioni per:

"La larghezza assoluta del display in pixel."

Esempio:

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

3326
2018-06-19 08:41



Un modo è:

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

È deprecato e dovresti provare il seguente codice. Le prime due righe di codice ti danno gli oggetti DisplayMetrics. Questo oggetto contiene i campi come heightPixels, widthPixels.

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

int height = metrics.heightPixels;
int width = metrics.widthPixels;

349
2018-01-31 02:01



Potrebbe non rispondere alla tua domanda, ma potrebbe essere utile sapere (stavo cercando io stesso quando sono arrivato a questa domanda) che se hai bisogno di una dimensione di Vista ma il tuo codice viene eseguito quando il suo layout non è ancora stato definito (per esempio in onCreate() ) puoi impostare a ViewTreeObserver.OnGlobalLayoutListener con View.getViewTreeObserver().addOnGlobalLayoutListener() e inserisci il codice pertinente che ha bisogno della dimensione della vista. Il callback dell'ascoltatore verrà chiamato quando il layout sarà stato disposto.


111
2018-04-06 21:23



(Risposta 2012, potrebbe non essere aggiornata) Se si desidera supportare pre Honeycomb, sarà necessario ripristinare la compatibilità prima dell'API 13. Qualcosa come:

int measuredWidth = 0;
int measuredHeight = 0;
WindowManager w = getWindowManager();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
    Point size = new Point();
    w.getDefaultDisplay().getSize(size);
    measuredWidth = size.x;
    measuredHeight = size.y;
} else {
    Display d = w.getDefaultDisplay();
    measuredWidth = d.getWidth();
    measuredHeight = d.getHeight();
}

Ovviamente i metodi deprecati finiranno per essere presi fuori dagli SDK più recenti, ma mentre continuiamo a fare affidamento sulla maggior parte dei nostri utenti che hanno Android 2.1, 2.2 e 2.3, questo è ciò che ci rimane.


103
2017-07-24 03:14



Ho provato tutte le possibili "soluzioni" senza successo e ho notato che l'app "Dalvik Explorer" di Elliott Hughes mostra sempre le dimensioni corrette su qualsiasi dispositivo Android / versione del sistema operativo. Ho finito col guardare al suo progetto open source che può essere trovato qui: https://code.google.com/p/enh/

Ecco tutto il codice pertinente:

WindowManager w = activity.getWindowManager();
Display d = w.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
d.getMetrics(metrics);
// since SDK_INT = 1;
widthPixels = metrics.widthPixels;
heightPixels = metrics.heightPixels;
try {
    // used when 17 > SDK_INT >= 14; includes window decorations (statusbar bar/menu bar)
    widthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(d);
    heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(d);
} catch (Exception ignored) {
}
try {
    // used when SDK_INT >= 17; includes window decorations (statusbar bar/menu bar)
    Point realSize = new Point();
    Display.class.getMethod("getRealSize", Point.class).invoke(d, realSize);
    widthPixels = realSize.x;
    heightPixels = realSize.y;
} catch (Exception ignored) {
}

EDIT: versione leggermente migliorata (evitare l'attivazione di eccezioni sulla versione del sistema operativo non supportato):

WindowManager w = activity.getWindowManager();
Display d = w.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
d.getMetrics(metrics);
// since SDK_INT = 1;
widthPixels = metrics.widthPixels;
heightPixels = metrics.heightPixels;
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17)
try {
    widthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(d);
    heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(d);
} catch (Exception ignored) {
}
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 17)
try {
    Point realSize = new Point();
    Display.class.getMethod("getRealSize", Point.class).invoke(d, realSize);
    widthPixels = realSize.x;
    heightPixels = realSize.y;
} catch (Exception ignored) {
}

62
2018-03-29 08:15



Per accedere all'altezza della barra di stato dei dispositivi Android, preferiamo un modo programmatico per ottenerlo:

Codice d'esempio

int resId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resId > 0) {
    result = getResources().getDimensionPixelSize(resId);
}

La variabile result dà l'altezza nel pixel.

Per un rapido accesso

Enter image description here

Per ulteriori informazioni sull'altezza di Title bar, Navigation bar e Content View, guarda gentilmente Dimensioni schermo dispositivo Android.


43
2017-08-27 13:12



Modo più semplice:

 int screenHeight = getResources().getDisplayMetrics().heightPixels;
 int screenWidth = getResources().getDisplayMetrics().widthPixels; 

42
2017-11-26 10:47



Per prima cosa ottieni la vista (ad es findViewById()) e quindi è possibile utilizzare getWidth () sulla vista stessa.


28
2018-06-19 08:38