Vraag Krijg schermafmetingen in pixels


Ik heb een aantal aangepaste elementen gemaakt en ik wil ze programmatisch in de rechterbovenhoek plaatsen (n pixels vanaf de bovenrand en m pixels vanaf de rechterrand). Daarom moet ik de schermbreedte en schermhoogte krijgen en vervolgens de positie instellen:

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

Hoe krijg ik screenWidth en screenHeight in de hoofdactiviteit?


1672
2018-06-19 08:25


oorsprong


antwoorden:


Als u de afmetingen van het display in pixels wilt gebruiken getSize:

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

Als je niet in een Activity je kunt de standaard krijgen Display via WINDOW_SERVICE:

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

Voor getSize werd geïntroduceerd (in API level 13), je kon de getWidth en getHeight methoden die nu zijn verouderd:

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

Voor de use-case die je beschrijft, lijkt een marge / padding in de lay-out echter meer aangewezen.

Een andere manier is: DisplayMetrics

Een structuur die algemene informatie over een display beschrijft, zoals de grootte, dichtheid en lettertype-schaal. Voor toegang tot de DisplayMetrics-leden initialiseert u een object als dit:

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

We kunnen gebruiken widthPixels om informatie te krijgen voor:

"De absolute breedte van het display in pixels."

Voorbeeld:

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

3327
2018-06-19 08:41



Een manier is:

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

Het is verouderd en u zou in plaats hiervan de volgende code moeten proberen. De eerste twee regels code geven u de DisplayMetrics-objectieven. Deze objecten bevatten de velden zoals heightPixels, widthPixels.

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

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

350
2018-01-31 02:01



Het is mogelijk dat je je vraag niet beantwoordt, maar het zou nuttig kunnen zijn om te weten (ik was er zelf naar op zoek toen ik bij deze vraag kwam) dat als je de dimensie van een View nodig hebt, maar je code wordt uitgevoerd als de lay-out nog niet is opgemaakt (bijvoorbeeld in onCreate() ) u kunt een instellen ViewTreeObserver.OnGlobalLayoutListener met View.getViewTreeObserver().addOnGlobalLayoutListener() en plaats de relevante code die de dimensie van het aanzicht daar nodig heeft. De callback van de luisteraar wordt gebeld wanneer de lay-out is opgemaakt.


111
2018-04-06 21:23



(Antwoord van 2012 kan verouderd zijn) Als u pre-Honeycomb wilt ondersteunen, moet u voorafgaande aan API 13 achterwaartse compatibiliteit instellen. Iets als:

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

Natuurlijk zullen de verouderde methoden uiteindelijk uit de meest recente SDK's worden gehaald, maar hoewel we nog steeds vertrouwen op de meeste van onze gebruikers met Android 2.1, 2.2 en 2.3, blijven we hier achter.


103
2017-07-24 03:14



Ik heb alle mogelijke "oplossingen" zonder succes geprobeerd en het viel me op dat de "" Dalvik Explorer "-app van Elliott Hughes altijd de juiste dimensie op elke Android-apparaat / OS-versie weergeeft. Ik heb uiteindelijk zijn open source-project bekeken dat hier te vinden is: https://code.google.com/p/enh/

Hier is alle relevante code:

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: enigszins verbeterde versie (vermijd schietvariaties op een niet-ondersteunde OS-versie):

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



Om toegang te krijgen tot de hoogte van de statusbalk voor Android-apparaten, geven we de voorkeur aan een programmatische manier om het te krijgen:

Voorbeeldcode

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

De variabele result geeft de hoogte in de pixel.

Voor snelle toegang

Enter image description here

Voor meer informatie over de hoogte van Title bar, Navigation bar en Content View, kijk eens goed Schermformaten voor Android-apparaten.


43
2017-08-27 13:12



Eenvoudigste manier:

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

42
2017-11-26 10:47



Eerste zicht (bijv. Door findViewById()) en dan kunt u gebruiken GetWidth () op het uitzicht zelf.


28
2018-06-19 08:38