Android'de ekran genişliğini ve yüksekliğini edinin


477

Ekran genişliğini ve yüksekliğini nasıl alabilirim ve bu değeri şu şekilde kullanabilirim:

@Override protected void onMeasure(int widthSpecId, int heightSpecId) {
    Log.e(TAG, "onMeasure" + widthSpecId);
    setMeasuredDimension(SCREEN_WIDTH, SCREEN_HEIGHT - 
        game.findViewById(R.id.flag).getHeight());
}

Yanıtlar:


1000

Bu kodu kullanarak, çalışma zamanı ekranının genişliğini ve yüksekliğini elde edebilirsiniz:

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;

Bir görünümde böyle bir şey yapmanız gerekir:

((Activity) getContext()).getWindowManager()
                         .getDefaultDisplay()
                         .getMetrics(displayMetrics);

Cihazların bir gezinme çubuğunun bulunduğu bazı senaryolarda, çalışma zamanında kontrol etmeniz gerekir:

public boolean showNavigationBar(Resources resources)
{
    int id = resources.getIdentifier("config_showNavigationBar", "bool", "android");
    return id > 0 && resources.getBoolean(id);
}

Cihazda bir gezinme çubuğu varsa, yüksekliğini sayın:

private int getNavigationBarHeight() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        int usableHeight = metrics.heightPixels;
        getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
        int realHeight = metrics.heightPixels;
        if (realHeight > usableHeight)
            return realHeight - usableHeight;
        else
            return 0;
    }
    return 0;
}

Yani cihazın son yüksekliği:

int height = displayMetrics.heightPixels + getNavigationBarHeight();

33
Cihaz döndürüldüğünde genişlik ve yükseklik değiştiriliyor mu?
Madeyedexter

14
@Madeyedexter evet olacak.
Parag Chauhan

1
Ancak artık varsayılan ekranda çalıştığınızı varsayamazsınız.
satur9nine

1
ya da sadece - getResources (). getDisplayMetrics (). heightPixels / getResources (). getDisplayMetrics (). widthPixels
Alex

1
@EpicPandaForce aslında başka bir ekranda bir etkinlik başlatmaya izin veren Android Oreo'yu düşünüyordum, aşağıdakilere bakın: developer.android.com/reference/android/app/…
satur9nine

275

Çok basit bir cevap var ve geçiş bağlamı yok

public static int getScreenWidth() {
    return Resources.getSystem().getDisplayMetrics().widthPixels;
}

public static int getScreenHeight() {
    return Resources.getSystem().getDisplayMetrics().heightPixels;
}

Not: Yüksekliğin gezinme çubuğunu içermesini istiyorsanız, aşağıdaki yöntemi kullanın

WindowManager windowManager =
        (WindowManager) BaseApplication.getApplication().getSystemService(Context.WINDOW_SERVICE);
    final Display display = windowManager.getDefaultDisplay();
    Point outPoint = new Point();
    if (Build.VERSION.SDK_INT >= 19) {
        // include navigation bar
        display.getRealSize(outPoint);
    } else {
        // exclude navigation bar
        display.getSize(outPoint);
    }
    if (outPoint.y > outPoint.x) {
        mRealSizeHeight = outPoint.y;
        mRealSizeWidth = outPoint.x;
    } else {
        mRealSizeHeight = outPoint.x;
        mRealSizeWidth = outPoint.y;
    }

3
Toplam ekran yüksekliği nasıl elde edilir? GetScreenHeight'ın bu sürümü tüm çubukları içermez.
Jaydev

1
bu çoğu durumda çalışır, ancak gezinme çubuğu görünürse gerçek ekran yüksekliğini alamaz. yükseklik çubuğun yüksekliğini hariç tutar.
L. Swifter

Bu, manzara modunda benim için alışılmadık sonuçlar verdi
Carson Holzheimer

1
Bu, birden fazla ekrana sahip ekranlarda (Katlanabilirler, Chrome OS dizüstü bilgisayarlar) soruna neden olur
EpicPandaForce

Gezinme çubuğunun yüksekliği Android 4.4'te yer
almıyor

45

Kullanımdan kaldırılmış yöntemlerden geçerli SDK geriye dönük uyumluluğa uyum sağlamak için yanıtı parag ve SpK ile güncellemek için:

int Measuredwidth = 0;  
int Measuredheight = 0;  
Point size = new Point();
WindowManager w = getWindowManager();

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)    {
    w.getDefaultDisplay().getSize(size);
    Measuredwidth = size.x;
    Measuredheight = size.y; 
}else{
    Display d = w.getDefaultDisplay(); 
    Measuredwidth = d.getWidth(); 
    Measuredheight = d.getHeight(); 
}

7
@digiphd Parang'ın kodu tüm API sürümlerinde çalışmaz mı? Tüm yöntemler API seviye 8'den önce tanıtıldı ve bunları android dev sitesinde kullanımdan kaldırmadım.
Sufyan

@Sufian getSizeSamsung Galaxy Mini (API 10) üzerindeki uygulamadan 0 olmayan dönüş değerleri almada sorun yaşadım, ancak bu cevaptaki kullanımdan kaldırılan yöntemler doğru bir şekilde dönüyor. Bu nedenle, Android'in eski sürümleri için yararlıdır.
Damien Diehl

@Sufian, ekran genişliğine ve yüksekliğine yeni boyut ayarlayabilir miyiz?
Srishti Roy

şu anda amortismana tabi
tutuldu

24

Neden olmasın

DisplayMetrics displaymetrics = getResources (). GetDisplayMetrics ();

sonra kullan

displayMetrics.widthPixels (heightPixels)


13

Aşağıdaki kodu deneyin: -

1.

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

2.

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

veya

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

3.

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

metrics.heightPixels;
metrics.widthPixels;

3
2 = 4
Trikaldarshi

Yöntem 2, yöntem 4'e eşittir
Trikaldarshi

Cihazın "doğal" çözünürlüğünü elde etmek mümkün müdür? Yani ekranı döndürürseniz döndürün, genişlik ve yükseklik için aynı değerleri elde edersiniz ve yatay olarak kullanılması gereken bir tabletse, yükseklik yerine genişliği geniş olana döndürür.
android geliştirici

12

Android'e girmek çok kolay:

int width  = Resources.getSystem().getDisplayMetrics().widthPixels;
int height = Resources.getSystem().getDisplayMetrics().heightPixels;

bu bir emülatörde 0 döndürür
l3ob

7

Kotlin kullanıcıları için

fun Activity.displayMetrics(): DisplayMetrics {
   val displayMetrics = DisplayMetrics()
   windowManager.defaultDisplay.getMetrics(displayMetrics)
   return displayMetrics
}

Ve Aktivitede şöyle kullanabilirsiniz

     resources.displayMetrics.let { displayMetrics ->
        val height = displayMetrics.heightPixels
        val width = displayMetrics.widthPixels
    }

Veya parça halinde

    activity?.displayMetrics()?.run {
        val height = heightPixels
        val width = widthPixels
    }

6
DisplayMetrics dimension = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dimension);
        int width = dimension.widthPixels;
        int height = dimension.heightPixels;

6
DisplayMetrics lDisplayMetrics = getResources().getDisplayMetrics();
int widthPixels = lDisplayMetrics.widthPixels;
int heightPixels = lDisplayMetrics.heightPixels;

6

Ekran genişliği ve yüksekliğinin değerini öğrenin.

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

4
Display display = ((WindowManager) this.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int mWidthScreen = display.getWidth();
int mHeightScreen = display.getHeight();

Kullanımdan kaldırıldı, DisplayMetrics () kullanın
deyanm

4
public class DisplayInfo {
    int screen_height=0, screen_width=0;
    WindowManager wm;
    DisplayMetrics displaymetrics;

    DisplayInfo(Context context) {
        getdisplayheightWidth(context);
    }

    void getdisplayheightWidth(Context context) {
        wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        displaymetrics = new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(displaymetrics);
        screen_height = displaymetrics.heightPixels;
        screen_width = displaymetrics.widthPixels;
    }

    public int getScreen_height() {
        return screen_height;
    }

    public int getScreen_width() {
        return screen_width;
    }
}

4

Buradaki yanıtların hiçbiri Chrome OS çoklu ekranları veya yakında sunulacak Katlanabilirler için düzgün çalışmıyor.

Geçerli yapılandırmayı ararken, her zaman için geçerli etkinliğinizdeki yapılandırmayı kullanın getResources().getConfiguration(). Arka plan etkinliğinizden veya sistem kaynağından yapılandırmayı kullanmayın. Arka plan etkinliğinin boyutu yoktur ve sistemin yapılandırması, çakışan boyutlara ve yönlere sahip birden çok pencere içerebilir , bu nedenle kullanılabilir veriler çıkarılamaz.

Yani cevap

val config = context.getResources().getConfiguration()
val (screenWidthPx, screenHeightPx) = config.screenWidthDp.dp to config.screenHeightDp.dp

3

Burada gösterilen yöntemler kullanımdan kaldırılmıştır / güncel değildir, ancak bu hala çalışmaktadır.

bunu kontrol et

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

3

Gerçek çözünürlüğü döndüren tam yol:

            WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
            Point size = new Point();
            wm.getDefaultDisplay().getRealSize(size);
            final int width = size.x, height = size.y;

Ve bu farklı yönelimde değişebileceğinden, yönelim ne olursa olsun bunu düzeltmek için bir çözüm (Kotlin'de):

/**
 * returns the natural orientation of the device: Configuration.ORIENTATION_LANDSCAPE or Configuration.ORIENTATION_PORTRAIT .<br></br>
 * The result should be consistent no matter the orientation of the device
 */
@JvmStatic
fun getScreenNaturalOrientation(context: Context): Int {
    //based on : http://stackoverflow.com/a/9888357/878126
    val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
    val config = context.resources.configuration
    val rotation = windowManager.defaultDisplay.rotation
    return if ((rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) && config.orientation == Configuration.ORIENTATION_LANDSCAPE || (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) && config.orientation == Configuration.ORIENTATION_PORTRAIT)
        Configuration.ORIENTATION_LANDSCAPE
    else
        Configuration.ORIENTATION_PORTRAIT
}

/**
 * returns the natural screen size (in pixels). The result should be consistent no matter the orientation of the device
 */
@JvmStatic
fun getScreenNaturalSize(context: Context): Point {
    val screenNaturalOrientation = getScreenNaturalOrientation(context)
    val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
    val point = Point()
    wm.defaultDisplay.getRealSize(point)
    val currentOrientation = context.resources.configuration.orientation
    if (currentOrientation == screenNaturalOrientation)
        return point
    else return Point(point.y, point.x)
}

1

Ekran boyutunun genişliğini ve yüksekliğini tamsayılar dizisi olarak döndüren aşağıdaki işlevi kullanmanız yeterlidir

private int[] getScreenSIze(){
        DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        int h = displaymetrics.heightPixels;
        int w = displaymetrics.widthPixels;

        int[] size={w,h};
        return size;

    }

OnCreate fonksiyonunuzda veya butona tıkladığınızda ekran boyutlarını aşağıda gösterildiği gibi çıkarmak için aşağıdaki kodu ekleyin

 int[] screenSize= getScreenSIze();
        int width=screenSize[0];
        int height=screenSize[1];
        screenSizes.setText("Phone Screen sizes \n\n  width = "+width+" \n Height = "+height);

1

Kotlin için bu kodu deneyin

 val display = windowManager.defaultDisplay
 val size = Point()
 display.getSize(size)
 var DEVICE_WIDTH = size.x
 var DEVICE_HEIGHT = size.y

1

Ekran boyutlarını almak için aşağıdaki kodu kullanıyorum

getWindow().getDecorView().getWidth()
getWindow().getDecorView().getHeight()

1

Kotlin dilinin cevabını güncelledim!

Kotlin için: Window Manager'ı aramalı ve metrik almalısınız. Bu kolay yoldan sonra.

val displayMetrics = DisplayMetrics()
windowManager.defaultDisplay.getMetrics(displayMetrics)

var width = displayMetrics.widthPixels
var height = displayMetrics.heightPixels

Kotlin dili ile bağımsız etkinlik yollarında nasıl etkin bir şekilde kullanabiliriz?

Burada, genel Kotlin sınıfında bir yöntem yarattım. Tüm aktivitelerde kullanabilirsiniz.

private val T_GET_SCREEN_WIDTH:String = "screen_width"
private val T_GET_SCREEN_HEIGHT:String = "screen_height"

private fun getDeviceSizes(activity:Activity, whichSize:String):Int{

    val displayMetrics = DisplayMetrics()
    activity.windowManager.defaultDisplay.getMetrics(displayMetrics)

    return when (whichSize){
        T_GET_SCREEN_WIDTH -> displayMetrics.widthPixels
        T_GET_SCREEN_HEIGHT -> displayMetrics.heightPixels
        else -> 0 // Error
    }
}

İletişim: @canerkaseler


1
Belki de daha iyi bir çözüm, Activity sınıfı için bir uzantı işlevi oluşturmak olabilir.
Micer

0

Weigan'ın cevabını bu sayfada en iyi olanı buldum , işte şöyle kullanabilirsiniz Xamarin.Android:

public int GetScreenWidth()
{
    return Resources.System.DisplayMetrics.WidthPixels;
}

public int GetScreenHeight()
{
    return Resources.System.DisplayMetrics.HeightPixels;
}

0

Ekran çözünürlüğü, ekrandaki toplam piksel sayısıdır. Aşağıdaki program cihazın ekran çözünürlüğünü ayıklayacaktır. Ekran genişliğini ve yüksekliğini yazdıracaktır. Bu değerler piksel cinsindendir.

public static Point getScreenResolution(Context context) {
// get window managers
WindowManager manager =  (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
Point point = new Point();
display.getSize(point);

 // get width and height
 int width = point.x;
 int height = point.y;

 return point;

}



0

İki adım. İlk olarak, Etkinlik sınıfını genişletin

class Example extends Activity

İkincisi: Bu kodu kullanın

 DisplayMetrics displayMetrics = new DisplayMetrics();
 WindowManager windowmanager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
 windowmanager.getDefaultDisplay().getMetrics(displayMetrics);
 int deviceWidth = displayMetrics.widthPixels;
 int deviceHeight = displayMetrics.heightPixels;

0
    int getScreenSize() {
        int screenSize = getResources().getConfiguration().screenLayout &
                Configuration.SCREENLAYOUT_SIZE_MASK;
//        String toastMsg = "Screen size is neither large, normal or small";
        Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
        int orientation = display.getRotation();

        int i = 0;
        switch (screenSize) {

            case Configuration.SCREENLAYOUT_SIZE_NORMAL:
                i = 1;
//                toastMsg = "Normal screen";
                break;
            case Configuration.SCREENLAYOUT_SIZE_SMALL:
                i = 1;
//                toastMsg = "Normal screen";
                break;
            case Configuration.SCREENLAYOUT_SIZE_LARGE:
//                toastMsg = "Large screen";
                if (orientation == Surface.ROTATION_90
                        || orientation == Surface.ROTATION_270) {
                    // TODO: add logic for landscape mode here
                    i = 2;
                } else {
                    i = 1;
                }


                break;
            case Configuration.SCREENLAYOUT_SIZE_XLARGE:
                if (orientation == Surface.ROTATION_90
                        || orientation == Surface.ROTATION_270) {
                    // TODO: add logic for landscape mode here
                    i = 4;
                } else {
                    i = 3;
                }

                break;


        }
//        customeToast(toastMsg);
        return i;
    }

-2
       @Override
        protected void onPostExecute(Drawable result) {
            Log.d("width",""+result.getIntrinsicWidth());
            urlDrawable.setBounds(0, 0, 0+result.getIntrinsicWidth(), 600);

            // change the reference of the current drawable to the result
            // from the HTTP call
            urlDrawable.drawable = result;

            // redraw the image by invalidating the container
            URLImageParser.this.container.invalidate();

            // For ICS
            URLImageParser.this.container.setHeight((400+URLImageParser.this.container.getHeight()
                    + result.getIntrinsicHeight()));

            // Pre ICS`enter code here`
            URLImageParser.this.container.setEllipsize(null);
        }

lütfen kodla birlikte bir açıklama yazın. kod sadece cevaplar genellikle SO - Review
Ram Ghadiyaram
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.