تشخیص جهت صفحه نمایش در اندروید

به نام خدا

در روند توسعه یک اپلیکیشن اندرویدی ممکن است در برخی مواقع لازم باشد عمل یا اعمالی بر اساس نحوه قرارگیری دستگاه انجام شوند. این عمل و تغییرات می‌تواند در رابط کاربری بوده و یا اینکه مربوط به عملکرد اصلی برنامه ما باشد.
برای تشخیص جهت قرارگیری صفحه نمایش به دو روش می‌توان عمل کرد که در ادامه و در قالب یک پروژه، هر دو روش را بررسی می‌کنیم. مطابق مبحث آموزش ساخت پروژه در اندروید استودیو یک پروژه اندرویدی با نام Orientation می‌سازم. اکتیویتی را از نوع Empty Activity و زبان را Java انتخاب کردم.
ابتدا دو TextView در layout اکتیویتی تعریف می‌کنم تا خروجی هر دو روش را نمایش دهد:

تشخیص جهت صفحه نمایش در اندروید
به نام خدا. در روند توسعه یک اپلیکیشن اندرویدی ممکن است در برخی مواقع لازم باشد عمل یا اعمالی بر اساس نحوه قرارگیری دستگاه انجام شوند. این عمل و تغییرات می‌تواند در رابط کاربری بوده و یا اینکه مربوط به عملکرد اصلی برنامه ما باشد.
برای تشخیص جهت قرارگیری صفحه نمایش به دو روش می‌توان عمل کرد که در ادامه و در قالب یک پروژه، هر دو روش را بررسی می‌کنیم. مطابق مبحث آموزش ساخت پروژه در اندروید استودیو یک پروژه اندرویدی با نام Orientation می‌سازم. اکتیویتی را از نوع Empty Activity و زبان را Java انتخاب کردم.
ابتدا دو TextView در layout اکتیویتی تعریف می‌کنم تا خروجی هر دو روش را نمایش دهد:
activity_main.xml

 

روش اول تشخیص جهت صفحه نمایش

در این روش با استفاده از کلاس Configuration وضعیت فعلی صفحه نمایش را بررسی کرده و با تعریف یک شرط، خروجی مناسب را دریافت می‌کنیم.
MainActivity.java

 

یک متغیر با نام دلخواه screenOrientation و از جنس int تعریف کردم که orientation فعلی صفحه را در خود ذخیره می‌کند:

عدد ذخیره شده در متغیر فوق، عدد ۱ یا ۲ خواهد بود که عدد ۱ نشانه وضعیت Portrait و عدد ۲ نشانه وضعیت Landscape است. سپس یک شرط تعریف شده که بررسی می‌کند چنانچه مقدار ذخیره شده در این متغیر با Configuration.ORIENTATION_LANDSCAPE برابر باشد (به عبارتی عدد ۲ ذخیره شده باشد) قسمت اول شرط و در غیر اینصورت قسمت دوم شرط اجرا شود. بدیهی است چنانچه از Configuration.ORIENTATION_PORTRAIT استفاده می‌کردم خروجی شرط بلعکس می‌شد. کانتکست را this قرار داده‌ام.
پروژه را اجرا می‌کنم:

در ابتدای اجرای شبیه ساز Genymotion صفحه نمایش در حالت عمودی قرار دارد و خروجی شرط که در TextView نمایش داده شده با وضعیت دستگاه همخوانی داشته و عبارت Portrait را نمایش می‌دهد. حالا دستگاه را در حالت افقی قرار می‌دهم:

مشاهده می‌کنید با تغییر وضعیت صفحه نمایش و قرار گرفتن در حالت افقی یا Landscape و restart شدن اکتیویتی، قسمت دوم شرط اجرا شده است.

 

روش دوم تشخیص جهت صفحه نمایش

در این قسمت از resource پروژه برای تشخیص وضعیت صفحه نمایش استفاده می‌کنیم. روی فولدر res پروژه راست کلیک کرده و Android Resource File را انتخاب می‌کنم:

نام فایل را layouts وارد کرده و در قسمت Directory name مطابق تصویر فوق، values-land می‌نویسم. از آنجایی که نام این دایرکتوری به land ختم شده، محتویات داخل آن در صورتی در دسترس خواهد بود که وضعیت صفحه نمایش در حالت Landscape قرار گرفته باشد. پس از ایجاد فایل layouts.xml آنرا به صورت زیر تکمیل می‌کنم:
values-land/layouts.xml

true

در این فایل یک ویژگی از جنس bool (مخفف boolean) تعریف کردم با نام دلخواه is_landscape و مقدار true. مجدد یک فایل دیگر به همین شیوه و با همان نام layouts.xml اما اینبار در دایرکتوری values-port ایجاد می‌کنم:
values-port/layouts.xml

false

در این فایل هم یک ویژگی با نام is_landscape تعریف کردم با این تفاوت که مقدار آن false است. این دو فایل در محیط پروژه به اینصورت نمایش داده می‌شود:

بوکزار سایتی پز ار آموطشهای مفید برنامه نویسی

حالا در اکتیویتی یک متغیر از جنس boolean تعریف می‌کنم:

 

توسط کد فوق، مقدار ویژگی bool با نام is_landscape از layouts.xml ای که با توجه به وضعیت صفحه نمایش در دسترس است، در متغیر isLandscape ذخیره می‌شود. یعنی چنانچه صفحه نمایش در حالت افقی قرار داشته باشد، layouts.xml دایرکتوری values-land در دسترس خواهد بود در نتیجه مقدار true را برمی‌گرداند و همینطور برای حالت عمودی مقدار false. در نهایت شرطی را برای بررسی خروجی این متغیر مانند قسمت قبل تعریف می‌کنم:

 

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

ملاحظه می‌کنید خروجی هردو روش بر اساس افقی یا عمودی بودن دستگاه بروز می‌شود.
کد کامل اکتیویتی:
MainActivity.java

منبع سایت android-studio.ir

موفق و پیروز باشید.

مطالعه بیشتر