مدیریت و غیر فعال کردن چرخش صفحه نمایش
در این جلسه به بررسی نحوه مدیریت چرخش صفحه نمایش یا به عبارتی چرخش اکتیویتی برنامه اندرویدی هنگام تغییر جهت قرارگیری دیوایس میپردازیم. یا به زبان ساده تر، غیر فعال کردن چرخش صفحه نمایش در برنامه اندرویدی از حالت عمودی (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 قرار دارد
تعداد صفحات : ۹
حجم : ۱ مگابایت
قیمت : رایگان
دانلود رایگان با حجم ۱ مگابایت لینک کمکی
با سلام،
من به راحتی با اضافه کردن android:screenOrientation=portrait در پوشه مانیفست، توانستم حالت چرخش افقی برنامه مورد علاقهام را تبدیل به حالت ثابت عمودی کنم و مشکلم رفع شد.
از ادمین سایت محترم «اندروید استودیو» بابت مطالب کاربردی و مفیدی که نشر دادهاید سپاسگزارم.
ممنون از شما بابت اشتراک گذاری تجربه خودتون
سلام… انتقاد شدیدی دارم بهتون چون با من یه تماس کوچیک نگرفتین و اصرار داشتین که آموزش هاتون در قسمت نصب و راه اندازی کاملا درسته…. ولی باید عرض کنم اصلا اینجور نبوده…. من خودم مشکل رو پیدا کردم. در حالی که اگه من صاحب سایت بودم برای اینکه قسمت سوال و جوابها کامل باشه خصوصا در قسمت نصب اندروید استودیو، به شدت مشکلات رو پیگیری می کردم… و دلیل دیگه واسه اینکه مشکلات افراد رو پیگیری می کرد تا با موفقیت اندروید استودیو رو نصب کنن اینه که تا کسی نصبش نکنه خب بقیه آموزش ها رو نمی خره…
اما از سرفصل هایی که آموزش دادین به شدت و قویا راضی هستم
خدا پشت و پناهتون باشه…
امیدوارم نظرم شما رو دلسرد نکنه.
سلام. ممنون از انتقادتون. نمیدونم بر چه اساسی من باید تماس بگیرم مشکلات فنی افراد رو رفع کنم. اینترنت و این همه فروم و وبسایت این وسط چیه پس؟ هیچ اصراری هم نداشتم. سوال پرسیدید جواب داده شد. اگه ایمیل رو هم جواب نمیدادم که الان انتقاد میکردید پیغام های ارسالی از طریق فرم تماس پاسخ داده نمیشه!
مهم هم نیست که بخواید آموزشهای غیر رایگان رو بخرید یا نه. از آموزشهای رایگان استفاده کنید و لذت ببرید.
موفق باشید
سلام. دوست عزیز با تشکر از زحمات شما:::
من با وجودی که آموزش های شما رو چند بار مرور کردم ولی متوجه نشدم چرا
نمی تونم شبیه ساز اندروید استودیو را کامل بکار ببرم.
من اول مراحل نصب جنی موشن رو انجام دادم. ولی متوجه شدم سیستم من از VT
پشتیبانی نمیکنه.
من یه سیستم ایمیج از سایتهای ایرانی دانلود کردم و پس از اکسترکت در
مسیر SDKimage-systemandroid کپی کردم. ولی به هیچ وجه چیزی در پنجره
مجازی ساز اندروید استودیو نشون داده نمیشه. و چون چیزی هم نیست نمی تونم
دانلود هم بکنم….
اگه ممکنه با هم یه تماس تلفنی داشته باشیم و یا با نرم افزارهای کنترل
از راه دور، سیستم من رو بررسی کنید…. هزینه هاشم بر روی چشم….. فقط
از این وضعیت سردرگمی نجات پیدا کنم…. ممنون
ممنون میشم سوالات رو در مبحث مربوطه مطرح کنید. این سوال شما مربوط به آموزش نصب جنی موشن هست. در خصوص مورد شما اون چیزی که اینجا ذکر کردید مسلما مسیری که فایل سیستم ایمیج رو گذاشتید اشتباه هست. اگر مبحث “نصب و راه اندازی اندروید استودیو” رو مطالعه کرده باشید اونجا مسیر قرار گرفتن سیستم ایمیج ها توضیح داده شده. البته این مبحث هفته قبل بروزرسانی شده اگه نسخه قدیم این آموزش رو دارید نسخه جدید رو مطالعه و دریافت کنید.
https://android-studio.ir/?p=249
خیلی عالی بود
همینطور ادامه بدید اجرتون با صاحب الزمان
سلام ، اگه موافق بودید ، Exoplayerر و آموزش بدید. خیلی کاربرداره و قطعا که جایگزین اینای فعلی هست
عالی بود ، لطفا آموزش چند زبانه کردن برنامه اندروید رو هم بزارید.