مدیریت و غیر فعال کردن چرخش صفحه نمایش
در این جلسه به بررسی نحوه مدیریت چرخش صفحه نمایش یا به عبارتی چرخش اکتیویتی برنامه اندرویدی هنگام تغییر جهت قرارگیری دیوایس میپردازیم. یا به زبان ساده تر، غیر فعال کردن چرخش صفحه نمایش در برنامه اندرویدی از حالت عمودی (Portrait) به افقی (Landscape) و بلعکس.
چرخش صفحه نمایش (اکتیویتی) برنامه اندرویدی
به نام خدا. حتما در کار با برنامههای موبایلی و بخصوص اندرویدی، با قابلیت چرخش صفحه نمایش هنگام چرخش و تغییر وضعیت دستگاه مواجه شدهاید. هنگام چرخش موبایل یا تبلت توسط کاربر، وضعیت جدید دستگاه توسط سنسور تعبیه شده در آن تشخیص داده شده و سیستم عامل نیز وضعیت جهت صفحه نمایش و به عبارت دیگر، اکتیویتی در حال اجرای برنامه را بر اساس جهت قرار گیری دستگاه تغییر میدهد.
به طور خلاصه، هنگامی که دستگاه در حالت افقی یا Landscape قرار گرفته باشد، اکتیویتی نیز به حالت افقی نمایش داده میشود. و همچنین هنگامی که دستگاه در حالت عمودی یا Portrait قرار گرفته باشد، اکتیویتی نیز به حالت عمودی نمایش داده میشود.
غیر فعال کردن چرخش صفحه نمایش
اما گاهی اوقات لازم است این قابلیت در برنامه و یا برخی از اکتیویتیهای آن غیر فعال شده و اکتیویتی صرفا در یک حالت ثابت نمایش داده شود. از نمونههای بارز آن میتوان به بازیهای موبایلی اشاره کرد که غالباً در یک جهت ثابت تعریف شدهاند و با چرخش دستگاه، جهت صفحه تغییر نمیکند.
بجز بازیها در برخی دیگر از برنامهها نیز بنا به ماهیت برنامه و محتویات آن ممکن است بخواهیم وضعیت اکتیویتی را در یک حالت مشخص قفل کنیم. برای مثال به اپلیکیشنهای بانکی اشاره میکنم که عمدتا در حالت عمودی طراحی شده و با چرخش موبایل یا تبلت همچنان در حالت عمودی قرار دارند.
در مبحث آموزش تشخیص جهت صفحه نمایش دستگاه اندرویدی نحوه بررسی وضعیت فعلی صفحه نمایش پرداختیم. در این جلسه به نحوه غیر فعال کردن چرخش صفحه نمایش در اندروید و همچنین انواع روشها و جزئیات آنها میپردازم.
پروژه مدیریت و غیر فعال کردن چرخش صفحه نمایش (اکتیویتی) در اندروید
میخواهیم مدیریت و همچنین غیر فعال کردن چرخش صفحه نمایش در اندروید را در قالب یک پروژه ساده بررسی کنیم.
طبق مبحث آموزش ساخت پروژه در اندروید استودیو یک پروژه اندرویدی با نام Manage Orientation میسازم. اکتیویتی را از نوع Empty Activity و زبان را Java انتخاب کردم.
برای غیر فعال کردن چرخش صفحه نمایش دو راه وجود دارد. در روش نخست در مانیفست پروژه یک ویژگی (attribute) به تگ اکتیویتی مربوطه اضافه میشود اما در روش دوم اینکار مستقیما درون اکتیویتی و در متد onCreate آن انجام میشود.
قبل از هر چیز پروژه را اجرا میکنم:
به طور پیش فرض، دیوایس در حالت عمودی قرار گرفته که صفحه نمایش و اکتیویتی نیز در همین وضعیت قرار دارد. حالا دستگاه را در وضعیت افقی قرار میدهم:
ملاحظه میکنید اکتیویتی نیز مطابق با وضعیت دستگاه در حالت افقی قرار گرفته و یک چرخش ۹۰ درجهای انجام شده است.
در ادامه مبحث با استفاده از دو روش، این چرخش را مدیریت و غیر فعال میکنیم.
روش اول: غیر فعال کردن چرخش اکتیویتی در مانیفست پروژه
در این روش صرفا با اضافه کردن ویژگی android:screenOrientation به تگ اکتیویتی مدنظر در فایل AndroidManifest.xml تعیین میکنیم وضعیت نمایش اکتیویتی روی چه حالتی باید ثابت شود؛ افقی یا عمودی. به کد زیر دقت کنید:
<activity android:name=".MainActivity" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
برای اکتیویتی MainActivity ویژگی android:screenOrientation با مقدار portrait تعریف کردم. انتظار دارم با اجرای مجدد پروژه، اکتیویتی در حالت افقی دستگاه نیز به صورت portrait نمایش داده شود که با اجرای پروژه، نتیجه مطلوب گرفته میشود:
طبیعتا انتظار داریم با تعریف مقدار landscape بجای portrait، اکتیویتی در هر دو حالت قرار گیری دستگاه به صورت افقی نمایش داده شود:
اما هنوز محدودیتی داریم به اینصورت که ثابت شدن وضعیت قرارگیری اکتیویتی فقط در جهت پیش فرض دیوایس انجام میشود. یعنی چنانچه مقدار landscape تعریف شود، اکتیویتی فقط در یک جهت افقی دستگاه ثابت میماند و چنانچه کاربر دستگاه را ۱۸۰ درجه بچرخاند به طوری که دستگاه مجدد در حالت افقی قرار گیرد، اکتیویتی به صورت وارونه نمایش داده خواهد شد.
برای حل این مشکل لازم است بجای مقادیر portrait و landscape به ترتیب از sensorPortrait و sensorLandscape استفاده شود. به عبارتی پیشوند sensor به ابتدای مقادیر اضافه شده است. تفاوت این دو گزینه در تصویر زیر مشهود است:
آیتم دیگری نیز وجود دارد که حالت افقی یا عمودی صفحه را میتوان در جهت عکس حالت پیش فرض افقی یا عمودی دستگاه قرار داد. به عبارتی، صفحه را در وضعیت ۱۸۰ درجهای نسبت به حالت افقی یا عمودی پیش فرض دستگاه قرار میدهد. برای اینکار از پیشوند reverse (به معنی معکوس) استفاده میکنیم؛ reversePortrait و reverseLandscape. البته بعید میدانم این گزینه کاربرد زیادی داشته باشد!
گزینه دیگری که سیستم عامل اندروید در اختیار توسعه دهندگان قرار داده، آیتمهای userPortrait و userLandscape هستند که از نام آن مشخص است نحوه قرار گیری حالت افقی یا عمودی را بر اساس تنظیماتی که کاربر روی دستگاه خود انجام داده تنظیم میشود. یعنی اینکه حالت افقی صفحه در جهت حالت افقی دستگاه باشد یا جهت عکس آن (چرخش ۱۸۰ درجهای) به سلیقه کاربر بستگی خواهد داشت.
روش دوم: غیر فعال کردن چرخش اکتیویتی توسط کد جاوا
در روش دوم، تعیین نحوه چرخش اکتیویتی به طور مستقیم درون خود اکتیویتی و متد onCreate آن انجام میشود. برای اینکار از متد setRequestedOrientation استفاده میکنیم:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
در کد فوق حالت SCREEN_ORIENTATION_SENSOR_LANDSCAPE تعیین شده که با حالت sensorLandscape تعریف شده در تگ اکتیویتی در مانیفست برابر است. سایر آیتمها نیز مشابه آنچه قبلا توضیح دادیم در دسترس هستند:
MainActivity.java
package ir.android_studio.manageorientation; import androidx.appcompat.app.AppCompatActivity; import android.content.pm.ActivityInfo; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); } }
موفق و پیروز باشید.
مطالعهی بیشتر:
https://developer.android.com/guide/topics/manifest/activity-element
توجه : سورس پروژه درون پوشه Exercises قرار دارد
تعداد صفحات : ۹
حجم : ۱ مگابایت
قیمت : رایگان
دانلود رایگان با حجم ۱ مگابایت لینک کمکی