القائمة الرئيسية

الصفحات

12-تعلم كيفية التحكم برمجيا في اتجاه دوران الشاشة في الاندرويد بالتفصيل

12-تعلم كيفية التحكم برمجيا في اتجاه دوران الشاشة في الاندرويد


سنتعلم في هذا الدرس كيفية التحكم في اتجاه دوران الشاشة في الاندرويد وكما هو معروف في أي جهاز اندرويد عند تدوير الجهاز فإن اتجاه الشاشة يتغير أيضا.
ويوجد في نظام الاندرويد نوعين من اتجاهات الدوران وهما:

1-Portrait وهو الوضع العمودي للشاشة أي يكون اتجاه دوران الشاشة بالاتجاه العمودي.

2-LandScape : وهو الوضع الافقي للشاشة أي يكون اتجاه دوران الشاشة بالاتجاه الافقي.


كيفية تثبيت اتجاه دوران الشاشة:


سنتعلم ايضا كيفية تثبيت اتجاه دوران الشاشة أي بمعنى أن نجعل للشاشة اتجاه دوران ثابت لا يتغير حتى مع تدوير الجهاز كمثال عندما تقوم ببرمجة لعبة وتريدها إن تكون دائما في الوضع الافقي ..ويتم ذلك بطريقتين وهما:


1-من خلال الخاصية android:screenOriention في ملف Mainfast.xml

وهذه الطريقة نستطيع من خلالها تثبيت اتجاه دوران الشاشة من خلال ملف Manifasr.xml  وذلك عبر الخطوات التالية:

1-نفتح بيئة اندرويد استديو ونقوم بإنشاء  مشروع جديد.

2- نذهب إلى ملف manifest.xml ونذهب إلى الوسم الخاص بالاكتفتي التي تريد تحديد اتجاه دورانها.

3-نقوم بإضافة الخاصية android:screenOriention وثم نقوم بإعطائها احد القيم التالية:

-landscap: لتحديد اتجاه الدوران إلى الوضع الافقي.
-portrait :لتحديد اتجاه الدوران إلى الوضع العمودي.

كما في الصورة ادناه تبين كيفية إضافة الخاصية  android:screenOriention في ملف manifest.xml
وتم تحديد القيمة landscap  لها أي بمعني إن الشاشة ستظهر بالوضع الافقي.


4-نقوم بتشغيل المشروع فإن الشاشة تبقى ثابته في الوضع العمودي في حالة تحديد الخاصية Portrait  كمافي الصورة ادناه:


 وفي حالة تحديد الخاصية landscape تبقى ثابته في الوضع الافقي كما في الصورة ادناه:





2- باستخدام الدالة setRequestedOrientation

وبهذه الطريقة يمكن تحديد اتجاه دوران الشاشة وذلك من  استدعاء دالة setRequestOriention بداخل دالة onCreate ونقوم بتمرير لها ثابت يقوم بتحديد اتجاه الدوران من خلال الكود ادناه:





1
2
3
4
5
6
7
8
 
​​@Override
​​​​ public void onCreate(Bundle savedInstanceState) {
​​​​​​​​ super.onCreate(savedInstanceState);
​​​​​​​​ setContentView(R.layout. main);
​​​​​​​​ //---change to landscape mode---
 setRequestedOrientation(ActivityInfo. SCREEN_ORIENTATION_LANDSCAPE);
}




نلاحظ من الكود إنه تم تمرير الثابت SCREEN_ORIENTATION_LANDSCAPE
وذلك لجعل الشاشة في الوضع الافقي .

إما إذا اردنا إن تكون الشاشة في الوضع العمودي فإننا نمرر الثابت 


 SCREEN_ORIENTATION_PORTRAIT .



كيفية معرفة اتجاه الدوران الشاشة:


في بعض الأحيان تكون بحاجة معرفة اتجاه الدوران الحالي للشاشة كمثال : في حالة كانت الشاشة في الوضع افقي تقوم بعمل حدث ما.. والعكس في حالة كانت الشاشة في الوضع العمودي تقوم بعمل اخرويتم ذلك بطريقتين ..


1-من خلال الخاصية  Android:onCofigChanges

ولكيفية معرفة الاتجاه الحالي للشاشة نقوم بالاتي:
1-نذهب الى ملف manifest.xml ونقوم بإضافة الخاصية
Android:onCofigChanges  للاكتفتي التي نريد معرفة حالة دورانها.

2- نقوم بإسناد القيمة  orientation|screenSize  لهذه الخاصية.
ووضيفة هذ الخاصية تقوم بإخبار نظام التشغيل عن التغييرات التي تحصل للاكتفتي  وقمنا بتحديد نوع التغيير الذي سيحصل وهو الدوران وذلك من خلال إسناد القيمة Oreintation .

3-نقوم باستقبال هذا التغيير من خلال  عمل اوفرايد للدالة onConfigrationChanged وذلك بالكود ادناه:



1
2
3
4
5
6
7
8
9
@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if(newConfig.orientation==Configuration.ORIENTATION_PORTRAIT){
            Toast.makeText(MainActivity.this, "Portrait", Toast.LENGTH_SHORT).show();
        }else{
            Toast.makeText(MainActivity.this,"LAND SCAPE",Toast.LENGTH_LONG).show();
        }
    }


لنقم بشرح هذا الكود حيث تقوم هذه الدالة بالاستجابة للتغيير الذي سيحصل لهذه الاكتفتي ويتم تمرير بارميتر من نوع Confgiration 
ونقوم الان بشرح الكود داخل هذه الدالة:
-      الاسطر4-5:  تقوم جملة الشرط الأولى بفحص قيما اذا كان حالة الدوران في الوضع العمودي اما لا

إذا كانت الاكتفتي في الوضع العمودي يقوم بطباعة رسالة باستخدام الكلاس Toast الذي يقوم بطباعة رسالة على الشاشة.

 ويتم فحص حالة اتجاه الدوران الشاشة من خلال :
فحص القيمة الراجعة من الدالة orientntion الموجودة في الكلاس Configration
إذا كانت القيمة تساوي ORIENTATION_PORTRAIT 
فإن الشاشة في الاتجاه العمودي ويتم طباعة رسالة Portrait على الشاشة.

الاسطر6-7: تقوم جملة الشرط الأولى بفحص قيما اذا كان حالة الدوران في الوضع الافقي اما لا؟ إذا كانت الاكتفتي في الوضع العمودي يقوم بطباعة رسالة باستخدام الكلاس Toast الذي يقوم بطباعة رسالة على الشاشة.


 ويتم فحص حالة اتجاه الدوران الشاشة من خلال :
فحص القيمة الراجعة من الدالة orientntion الموجودة في الكلاس Configration
إذا كانت القيمة تساوي ORIENTATION_LAND_SCAPE 

فإن الشاشة في الاتجاه العمودي ويتم طباعة رسالة Land Scape على الشاشة.



2-باستخدام الكلاس WindowManager


وبهذه الطريقة نقوم بمعرفة ابعاد الشاشة وذلك باستخدام الكائن من الكلاس WindowManager
  وذلك عبر الكود التالي:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
 WindowManager wm = getWindowManager();
 Display d = wm.getDefaultDisplay();
 if (d.getWidth() > d.getHeight())
 {
 //---landscape mode---
 Toast.makeText(MainActivity.this,"LANS SCAPE",Toast.LENGTH_LONG).show();
 }
 else
 {
 //---portrait mode---
Toast.makeText(MainActivity.this,"portrait",Toast.LENGTH_LONG).show();
 }
والان نقوم بشرح هذا الكود:
السطر 1:نقوم بالحصول على كائن windowmanager وذلك من خلال استدعاء الدالة getWindowManager.

السطر2 :باستدعاء الدالة getDefualtDisplay تقوم بارجاع كائن من نوع Display والذي يحتوي على معلومات حول الشاشة ومن ضمن داول الكائن Display:
-الدالة getHeight() : ترجع طول الشاشة.
-الدالة getWidth(): ترجع عرض الشاشة.

الاسطر 3-7: نقوم بفحص اذا كان عرض الشاشة اكبر من طولها وهذا يعني إن الشاشة في الوضع الافقي ومن ثم طباعة رسالة على هذه الشاشة.

الاسطر 8-12: فحص اذا كان عرض الشاشة اصغر من طولها وهذا يعني إن الشاشة في الوضع العمودي ومن ثم طباعة رسالة على هذه الشاشة.

وهكذا نكون انهينا هذا الدرس ..رأيكم يهمني بالتعليقات.