أجهزة غامرة

تمنحك الرسومات الثلاثية طرقًا إضافية لاستهلاك مدخلات المستخدمين وإنشاء واجهات للمستخدمين. ويسمح لك هذا بإنشاء التجربة الأكثر تخصيصًا، ولكنه ينطوي على أكبر قدر من العمل.

إذا كانت هذه هي المرة الأولى التي تُطور فيها Glass، يمكنك الاطّلاع على دليل الانغماس بدلاً من ذلك. يتناول هذا المستند كيفية صناعة أوانٍ زجاجية كاملة باستخدام أدوات غمر، مع اتباع أفضل ممارسات التصميم.

آلية عملها

يتم عرض الرسومات خارج المخطط الزمني، مما يمنحك تحكمًا كاملاً في تجربة المستخدم من وقت تشغيل Glass للغطس.

يمكنك تحقيق الانسجام من خلال أنشطة Android القياسية والتنسيقات وأدوات واجهة المستخدم وبقية النظام الأساسي لـ Android. ويمكنك بعد ذلك استخدام GDK للتكامل مع تجربة Glass مثل دمج الأوامر الصوتية والبطاقات المصممة على طراز Glass والمزيد.

وعندما تبدأ الانغماس، تظهر أعلى المخطط الزمني. عندما ينتهي المستخدمون من الاندماج مع الجهاز، يعودون سريعًا لأسفل.

حالات الاستخدام

وتُعدّ عمليات الانغماس في التجربة رائعةً في التجارب التي تتطلّب اهتمامًا مطوّلاً من المستخدم. وهي تتيح لك إنشاء واجهة مستخدم متخصصة تظهر خارج المخطط الزمني، حتى يتمكن المستخدمون من التعمق في تجربة مخصصة.

كما تُعد عمليات الدمج ضرورية عندما تحتاج إلى استبدال الوظائف الخاصة بالمخطط الزمني مثل التمرير السريع للأمام وللخلف والتحكم في مهلة الشاشة.

ومع ذلك، لا تستخدم الغرامات إلا إذا اضطررت إلى ذلك؛ لأنها تتطلب المزيد من العمل لبناءها ووقت أطول للتصميم بشكل جيد. تقدم البطاقات المباشرة ميزات وإمكانيات كافية لمعظم أنواع الأواني الزجاجية.

خلق تجربة غامرة

يمكنك إنشاء تجربة غامرة باستخدام أنشطة Android القياسية، ولكن ضع ما يلي في اعتبارك عند كتابة أنشطة لـ Glass:

  • صمم واجهات المستخدم لشاشة بحجم 640 × 360 بكسل.
  • صمم تفاعلات مفيدة مع Glass بدلاً من نقل الأنشطة من أجهزة Android الأخرى.
  • لا تعتمد على إيماءات اللمس المعقدة أو أنماط واجهة المستخدم.
  • يؤدي التمرير السريع لأسفل دائمًا إلى الرجوع في حزمة الأنشطة حتى يصل المستخدمون إلى المخطط الزمني. ومن المفترض أن يعمل التطبيق تمامًا مثل زر الرجوع في Android على الهواتف الذكية والأجهزة اللوحية.
  • أنشئ رمزًا بحجم 50 × 50 بكسل وحدّده للسمة android:icon للعنصر <activity> في بيان Android. تحديد النص أيضًا لـ android:label. يسمح هذا لعنصر صوت أو بلمس قائمة مقترن بأدوات زجاجية متعددة بعرض اسم ورمز Glassware كخيار.
  • يمكنك تحديد android:immersive="true" للعنصر <activity> للتركيز على اندماج البطارية بعد أن تصبح الشاشة في وضع السكون والاستيقاظ.

إنشاء قائمة وعرضها

يعرض Glass النمط الصحيح للقوائم إذا أنشأتها باستخدام واجهات برمجة تطبيقات قائمة Android القياسية ضمن نشاط.

لعرض قائمة لأحد الأنشطة، يمكنك إنشاء موارد قائمة ومن ثم عرضها وفقًا لإجراء يتخذه المستخدم، مثل النقر عندما يكون نشاطك محل التركيز.

إنشاء موارد القائمة

إن عملية إنشاء موارد القائمة مماثلة تمامًا لنظام Android الأساسي، ولكن اتبع هذه الإرشادات:

  • لكل عنصر من عناصر القائمة، قدم رمز عنصر قائمة مقاس 50 × 50 بكسل. يجب أن يكون رمز القائمة أبيض اللون على خلفية شفافة. تنزيل رموز قائمة Glass لاستخدامها أو كمثال.
  • استخدِم عبارة قصيرة تصف الإجراء وتكون عبارة عن جملة. يعمل الفعل الفعال بشكل جيد (على سبيل المثال، "مشاركة" أو "الرد على الكل").

في ما يلي طريقة بسيطة للبدء:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/reply_menu_item"
        android:title="@string/reply"                <!-- imperative verb -->
        android:icon="@drawable/icons_50_reply" />   <!-- white in color on
                                                     transparent background
                                                     -->
</menu>

لمزيد من المعلومات حول إنشاء قوائم Android، راجع موضوع القائمة في مستندات Android SDK.

معالجة استدعاءات القائمة

تتضمن الفئة Activity استدعاءات يتم تجاوزها لمعالجة إنشاء القائمة وعرضها والتخلص منها:

  1. onCreateOptionsMenu() لتضخيم مورد قائمة XML.
  2. onPrepareOptionsMenu() تعرض عناصر القائمة أو تخفيها، إذا لزم الأمر. على سبيل المثال، يمكنك عرض عناصر مختلفة في القائمة بناءً على ما يفعله المستخدمون.
  3. يتعامل onOptionsItemSelected() مع اختيار المستخدم.

    public class MyActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.stopwatch, menu);
            return true;
        }
    
        @Override
        public boolean onPrepareOptionsMenu(Menu menu) {
            // Implement if needed
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle item selection. Menu items typically start another
            // activity, start a service, or broadcast another intent.
            switch (item.getItemId()) {
                case R.id.stop:
                    startActivity(new Intent(this,
                    StopStopWatchActivity.class));
                    return true;
                default:
                    return super.onOptionsItemSelected(item);
            }
        }
    }
    

عرض القائمة

لعرض القائمة، انقر على openOptionsMenu() إذا لزم الأمر، مثل النقر على لوحة اللمس. تكشف الأمثلة التالية إيماءة نقر على نشاط، ثم تستدعي openOptionsMenu().

public class MainActivity extends Activity {
    // ...
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
          if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
              openOptionsMenu();
              return true;
          }
          return super.onKeyDown(keyCode, event);
    }
}

تتوفر بعض الطرق المساعِدة لتعديل شكل القوائم وسلوكها. لمزيد من المعلومات، يُرجى الاطّلاع على MenuUtils.