بدست آوردن اندازه صفحه نمایش دستگاه اندرویدی

بدست آوردن اندازه صفحه نمایش در برنامه نویسی اندروید
در این جلسه از سری مباحث آموزش برنامه نویسی اندروید قصد داریم نحوه بدست آوردن اندازه صفحه نمایش یک دستگاه اندرویدی را بررسی کنیم. برای این کار از دوس کلاس Display و DisplayMetrics استفاده خواهیم کرد.

بدست آوردن اندازه صفحه نمایش در اندروید

به نام خدا. در برخی موارد ممکن است توسعه دهنده و برنامه نویس اندروید، نیازمند دانستن اندازه (طول و عرض) صفحه نمایش دستگاه‌های اندرویدی بر حسب پیکسل (pixel) باشد تا بر اساس آن بتواند عمل مناسبی انجام دهد. همچنین می‌توان تراکم پیکسلی صفحه نمایش یا همان DPI (مخفف Dots per inch) به معنی تعداد نقطه در اینچ را نیز بدست آورد.
برای اینکار مطابق مبحث آموزش ساخت پروژه در اندروید استودیو یک پروژه اندرویدی با نام ScreenSize می‌سازم. اکتیویتی را از نوع Empty Activity و زبان را Java انتخاب کردم. در این تمرین از دو کلاس Display و DisplayMetrics برای بدست آوردن اندازه صفحه نمایش استفاده می‌کنم که از کلاس دوم علاوه بر سایر صفحه نمایش، DPI صفحه هم بدست می‌آید.
قبل از کار با کلاس‌ها، دو TextView در layout اکتیویتی تعریف می‌کنم:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/display"
        android:text="" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/display_metrics"
        android:text=""
        android:layout_below="@id/display" />

</RelativeLayout>

بدست آوردن اندازه صفحه نمایش توسط کلاس Display

ابتدا یک نمونه از کلاس Display به صورت زیر می‌سازم:

Display displaySize = getWindowManager().getDefaultDisplay();

با تعریف کد فوق، اطلاعات مربوط به صفحه نمایش دستگاه اندرویدی از جمله نام صفحه و اندازه آن در displaySize ذخیره می‌شود. سپس یک نمونه از کلاس Point می‌سازم تا مختصات طول و عرض صفحه نمایش را از displaySize دریافت و ذخیره کند:

Point size = new Point();
displaySize.getSize(size);

توسط getSize() مختصات در size ذخیره شده است. در نهایت، طول و عرض دریافتی را به دو مقدار از جنس int تبدیل می‌کنم:

int displayWidth = size.x;
int displayHeight = size.y;

در دو خط بالا، size.x اندازه عرض و size.y اندازه ارتفاع یا طول را برمی‌گرداند که در دو int ذخیره شده است.
حالا مختصات را در TextView اولی نمایش می‌دهم. کد کامل اکتیویتی:

MainActivity.java

package ir.android_studio.screensize;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Point;
import android.os.Bundle;
import android.view.Display;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView txtDisplay, txtDisplayMetrics;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        txtDisplay = findViewById(R.id.display);
        txtDisplayMetrics = findViewById(R.id.display_metrics);

        Display displaySize = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        displaySize.getSize(size);
        int displayWidth = size.x;
        int displayHeight = size.y;

        txtDisplay.setText("Width: " + displayWidth + " / " + "Height: " + displayHeight);

    }
}

پروژه را اجرا می‌کنم:

بدست آوردن اندازه صفحه نمایش دستگاه اندرویدی توسط کلاس Display

مشاهده می‌کنید اعداد ۱۰۸۰ و ۲۰۳۴ به ترتیب عرض و ارتفاع صفحه نمایش این دستگاه، یعنی دیوایس مجازی شبیه ساز اندرویدی Genymotion را نشان می‌دهند.

بدست آوردن اندازه صفحه نمایش توسط کلاس DisplayMetrics

کدهای زیر را به اکتیویتی اضافه می‌کنم:

DisplayMetrics metricSize = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metricSize);
int metricDisplayWidth = metricSize.widthPixels;
int metricDisplayHeight = metricSize.heightPixels;
int metricDPI = metricSize.densityDpi;
float xdp = metricSize.xdpi;
float ydp = metricSize.ydpi;
txtDisplayMetrics.setText("Width: " + metricDisplayWidth + " / " + "Height: " + metricDisplayHeight + " DPI: " + metricDPI + " X:" + xdp + " Y:" + ydp);

در این قسمت و با استفاده از کلاس DisplayMetrics مانند قسمت قبل ابتدا اندازه صفحه نمایش بر حسب پیکسل گرفته شده است. metricSize.widthPixels مقدار عرض و metricSize.heightPixels مقدار ارتفاع را برمی‌گرداند. همچنین metricSize.densityDpi مقدار DPI صفحه را برمی‌گرداند. علاوه بر آن، مختصات طول و عرض DPI هم توسط metricSize.xdpi و metricSize.ydpi گرفته شده است.
مجدد پروژه را اجرا می‌کنم:

بدست آوردن اندازه صفحه نمایش و DPI دستگاه اندرویدی توسط کلاس DisplayMetrics

در تصویر فوق ملاحظه می‌کنید طول و عرض صفحه نمایش مانند خروجی کلاس قبل بوده و علاوه بر آن، DPI صفحه و مختصات X و Y آن نیز عدد ۴۲۰ را نشان می‌دهد.
کد کامل اکتیویتی:

MainActivity.java

package ir.android_studio.screensize;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Point;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Display;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView txtDisplay, txtDisplayMetrics;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        txtDisplay = findViewById(R.id.display);
        txtDisplayMetrics = findViewById(R.id.display_metrics);

        Display displaySize = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        displaySize.getSize(size);
        int displayWidth = size.x;
        int displayHeight = size.y;

        txtDisplay.setText("Width: " + displayWidth + " / " + "Height: " + displayHeight);

        DisplayMetrics metricSize = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metricSize);
        int metricDisplayWidth = metricSize.widthPixels;
        int metricDisplayHeight = metricSize.heightPixels;
        int metricDPI = metricSize.densityDpi;
        float xdp = metricSize.xdpi;
        float ydp = metricSize.ydpi;

        txtDisplayMetrics.setText("Width: " + metricDisplayWidth + " / " + "Height: " + metricDisplayHeight + " DPI: " + metricDPI + " X:" + xdp + " Y:" + ydp);

    }
}

مطالعه‌ی بیشتر:

https://developer.android.com/reference/android/view/Display
https://developer.android.com/reference/android/graphics/Point
https://developer.android.com/reference/android/util/DisplayMetrics

توجه : سورس پروژه درون پوشه Exercises قرار دارد

دانلود نسخه PDF این آموزش به همراه سورس پروژه
تعداد صفحات : ۷
حجم : ۱ مگابایت
قیمت : رایگان
دانلود رایگان با حجم ۱ مگابایت لینک کمکی
این مطلب چقدر برایتان مفید بود؟ لطفا امتیاز دهید
4.3/5 - (24 امتیاز)
پرسش‌ها و دیدگاه‌های کاربران
دوره آموزش برنامه نویسی اندروید
دوره آموزش برنامه نویسی اندروید

با دریافت این دوره به تمامی آموزش‌های غیر رایگان و رایگان موجود در وب سایت دسترسی دارید که تخفیفی برای آموزش‌های غیر رایگان نیز درنظر گرفته شده. این پکیج به دو صورت دانلودی و ارسال پستی ارائه می‌گردد.
آموزش‌های اندروید استودیو در دو دسته «پایه» و «تکمیلی» منتشر می‌شوند.
آموزش‌های پایه شامل مباحث اصلی و ضروری و آموزش‌های تکمیلی مطالبی است که می‌بایست در کنار مطالب اصلی بررسی شود.
با خرید این دوره، به تمامی آموزش‌های غیر رایگانی که در آینده منتشر می‌شود نیز به صورت رایگان دسترسی خواهید داشت!

یک دیدگاه بنویسید

پرسش‌های زیر تایید و پاسخ داده نـــخواهند شد:
۱: جزء موارد مطرح شده در صفحات مشکلات و پرسش‌های رایج و بروزرسانی‌های محتوای آموزشی باشد
۲: سوال قبلا توسط کاربران در دیدگاه‌ها مطرح و پاسخ داده شده باشد
۳: پرسش خارج از مبحث آموزشی موجود در این صفحه باشد