بدست آوردن اندازه صفحه نمایش دستگاه اندرویدی
در این جلسه از سری مباحث آموزش برنامه نویسی اندروید قصد داریم نحوه بدست آوردن اندازه صفحه نمایش یک دستگاه اندرویدی را بررسی کنیم. برای این کار از دوس کلاس 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); } }
پروژه را اجرا میکنم:
مشاهده میکنید اعداد ۱۰۸۰ و ۲۰۳۴ به ترتیب عرض و ارتفاع صفحه نمایش این دستگاه، یعنی دیوایس مجازی شبیه ساز اندرویدی 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 صفحه و مختصات 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 قرار دارد
تعداد صفحات : ۷
حجم : ۱ مگابایت
قیمت : رایگان
دانلود رایگان با حجم ۱ مگابایت لینک کمکی
سلام:”به نام خدا”،،،،، جمله ای که این روزا خییییلی کم دیده میشه ،، متاسفانه البته،،،،،،، ممنونم ازتون،،، لطفا این کامنت رو بصورت عمومی نمایش ندید،ممنون
ممنون. چرا عمومی نشه کامنت؟ خیلی هم خوبه
عالیییییییییییییی