واجهات برمجة تطبيقات Android 3.0

مستوى واجهة برمجة التطبيقات: 11

بالنسبة إلى المطورين، يتوفر نظام Android 3.0 (HONEYCOMB) كمكوِّن قابل للتنزيل من أجل Android SDK. وتشتمل المنصة القابلة للتنزيل على مكتبة Android وصورة نظام، بالإضافة إلى مجموعة من مظاهر المحاكيات وغيرها. لا يحتوي النظام الأساسي القابل للتنزيل على مكتبات خارجية.

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

نظرة عامة على واجهة برمجة التطبيقات

تقدّم الأقسام أدناه نظرة عامة فنية على الميزات الجديدة لمطوّري البرامج في Android 3.0، بما في ذلك الميزات والتغييرات الجديدة في واجهة برمجة التطبيقات لإطار العمل منذ الإصدار السابق.

أجزاء

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

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

علاوةً على ذلك:

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

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

لإجراء معاملة، مثل إضافة جزء أو إزالته، يجب إنشاء FragmentTransaction. يمكنك بعد ذلك طرق الاتصال مثل add() remove() أو replace(). بعد تطبيق جميع التغييرات التي تريد إجراؤها على المعاملة، يجب استدعاء الإجراء commit() وسيطبِّق النظام معاملة التجزئة على النشاط.

لمزيد من المعلومات حول استخدام الأجزاء، اقرأ مستندات الأجزاء. تتوفر عدّة نماذج أيضًا في تطبيق APIs Demos.

شريط الإجراءات

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

  • أضف عناصر القائمة مباشرةً في شريط الإجراءات - بصفتها "عناصر إجراء".

    في بيان XML لعنصر القائمة، يجب تضمين السمة android:showAsAction مع القيمة "ifRoom". عندما تكون هناك مساحة كافية، يظهر عنصر القائمة مباشرة في شريط الإجراءات. بخلاف ذلك، يتم وضع العنصر في القائمة الكاملة، يتم الكشف عنها من خلال أيقونة القائمة على الجانب الأيمن من شريط الإجراءات.

  • استبدِل عنصر عمل بأداة (مثل مربّع بحث) — مما يؤدي إلى إنشاء "عرض إجراء".

    في إعلان XML لعنصر القائمة، أضِف السمة android:actionViewLayout مع مورد تنسيق أو السمة android:actionViewClass مع اسم فئة الأداة. (يجب أيضًا توضيح السمة android:showAsAction لكي يظهر العنصر في شريط الإجراءات). وإذا لم تكن هناك مساحة كافية في شريط الإجراءات وظهر العنصر في القائمة الكاملة، فسيتعامل كعنصر قائمة عادي ولا يعرض الأداة.

  • إضافة إجراء إلى شعار التطبيق واستبداله بشعار مخصّص

    يتم تلقائيًا تعيين معرّف android.R.id.home لشعار التطبيق، ويسلّمه النظام لرد اتصال onOptionsItemSelected() الخاص بنشاطك عند لمسه. ما عليك سوى الرد على هذا المعرف في طريقة معاودة الاتصال لتنفيذ إجراء مثل الانتقال إلى نشاط "الصفحة الرئيسية" لتطبيقك.

    لاستبدال الرمز بشعار، حدِّد شعار تطبيقك في ملف البيان باستخدام السمة android:logo، ثم استدعِ setDisplayUseLogoEnabled(true) في نشاطك.

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

يتوفر شريط الإجراءات بشكل قياسي لجميع التطبيقات التي تستخدم المظهر المجسم الجديد، وهو ما يتوفر بشكل قياسي أيضًا عند ضبط android:minSdkVersion أو android:targetSdkVersion على "11".

لمزيد من المعلومات حول شريط الإجراءات، يُرجى قراءة وثائق شريط الإجراءات. تتوفر عدّة نماذج أيضًا في تطبيق APIs Demos.

حافظة النظام

يمكن للتطبيقات الآن نسخ البيانات ولصقها (بخلاف النصوص) من وإلى الحافظة على مستوى النظام. يمكن أن تكون البيانات التي يتم اقتطاعها نصًا عاديًا أو معرّف موارد منتظمًا (URI) أو هدفًا.

يمكن للمستخدم نسخ محتوى معقد (مثل صورة أو بنية بيانات) من التطبيق ولصقه في تطبيق آخر يتوافق مع هذا النوع من المحتوى، وذلك بتوفير إمكانية وصول النظام إلى البيانات التي تريد من المستخدم نسخها من خلال موفّر محتوى.

لبدء استخدام الحافظة، احصل على كائن ClipboardManager العمومي من خلال طلب getSystemService(CLIPBOARD_SERVICE).

لنسخ عنصر إلى الحافظة، عليك إنشاء كائن ClipData جديد يحتوي على عنصر ClipData.Item واحد أو أكثر، يصف كل عنصر عنصرًا واحدًا. لإنشاء عنصر ClipData يحتوي على ClipData.Item واحد فقط، يمكنك استخدام إحدى الطرق المساعدة، مثل newPlainText() وnewUri() وnewIntent()، والتي تعرض كل منها عنصر ClipData تم تحميله مسبقًا مع ClipData.Item التي تقدّمها.

لإضافة "ClipData" إلى الحافظة، يُرجى تمريره إلى setPrimaryClip() للمثيل من "ClipboardManager".

يمكنك بعد ذلك قراءة ملف من الحافظة (للصقه) عن طريق استدعاء getPrimaryClip() على ClipboardManager. قد يكون التعامل مع ClipData الذي تتلقّاه معقدًا وتحتاج إلى التأكد من إمكانية التعامل مع نوع البيانات في الحافظة قبل محاولة لصقه.

تحتوي الحافظة على جزء واحد فقط من البيانات التي تم اقتصاصها (كائن ClipData) في كلّ مرة، ولكن يمكن أن يحتوي ClipData واحد على عدة ClipData.Item.

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

سحب وإفلات

تعمل واجهات برمجة التطبيقات الجديدة على تبسيط عمليات السحب والإفلات في واجهة مستخدم التطبيق. وعملية السحب هي نقل نوع من البيانات التي يتم نقلها في كائن ClipData من مكان إلى آخر. نقطتا البداية والنهاية لعملية السحب هي View، وبالتالي تقع واجهات برمجة التطبيقات التي تعالج عمليات السحب والإفلات مباشرةً في الفئة View.

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

لبدء سحب المحتوى في نشاطك، يمكنك استدعاء startDrag() على View، مع تقديم كائن ClipData يمثّل البيانات المطلوب سحبها، وView.DragShadowBuilder لتسهيل "الظل" الذي يظهر للمستخدمين تحت أصابعهم أثناء السحب، واستدعاء Object يمكنه مشاركة معلومات حول كائن السحب باستخدام طرق العرض التي قد تتلقى هذا الكائن.

لقبول عنصر سحب في View (تلقّي "الإفلات")، عليك تسجيل العرض باستخدام OnDragListener من خلال طلب رمز setOnDragListener(). عند وقوع حدث سحب في العرض، يطلب النظام onDrag() إلى OnDragListener، ويتلقّى هذا النظام DragEvent لوصف نوع إجراء السحب الذي حدث (مثل ACTION_DRAG_STARTED وACTION_DRAG_ENTERED وACTION_DROP). خلال عملية السحب، يستدعي النظام onDrag() بشكل متكرر للعرض أسفل السحب لعرض بث أحداث السحب. يمكن لعرض الاستلام الاستعلام عن نوع الحدث الذي تم إرساله إلى onDragEvent() من خلال الاتصال بـ getAction() على DragEvent.

ملاحظة: على الرغم من أن حدث السحب قد يتضمن كائن ClipData، فإن هذا لا يتعلق بحافظة النظام. ينبغي ألا تؤدي عملية السحب والإفلات إلى وضع البيانات التي تم سحبها في حافظة النظام مطلقًا.

لمزيد من المعلومات، اقرأ وثائق السحب والإفلات. يمكنك أيضًا الاطلاع على تنفيذ السحب والإفلات في تطبيق API Demos وتطبيق Honeycomb Gallery.

أدوات التطبيقات

يتوافق Android 3.0 مع العديد من فئات الأدوات الجديدة لمزيد من أدوات التطبيقات التفاعلية على الشاشة الرئيسية للمستخدمين، بما في ذلك: GridView وListView وStackView وViewFlipper وAdapterViewFlipper.

والأهم من ذلك، يمكنك استخدام RemoteViewsService الجديدة لإنشاء أدوات التطبيقات مع المجموعات باستخدام أدوات مثل GridView وListView وStackView المستندة إلى بيانات عن بُعد، مثل تلك الواردة من موفّر محتوى.

تتيح أيضًا الفئة AppWidgetProviderInfo (المحدّدة في ملف XML باستخدام عنصر <appwidget-provider>) حقلَين جديدَين: autoAdvanceViewId وpreviewImage. يتيح لك الحقل autoAdvanceViewId تحديد رقم تعريف طريقة العرض للعرض الفرعي لأداة التطبيق التي يجب أن يتقدّم بها تلقائيًا مضيف أداة التطبيق. يحدِّد الحقل previewImage معاينة لشكل أداة التطبيق ويتم عرضها للمستخدم من أداة اختيار الأدوات. وإذا لم يتوفر هذا الحقل، سيتم استخدام رمز أداة التطبيق للمعاينة.

للمساعدة في إنشاء صورة معاينة لأداة تطبيقك (لتحديدها في حقل previewImage)، يتضمّن محاكي Android تطبيقًا يُسمى "معاينة الأداة". لإنشاء صورة معاينة، شغِّل هذا التطبيق، وحدد التطبيق المصغَّر لتطبيقك واضبطه للطريقة التي تريد أن تظهر بها صورة المعاينة، ثم احفظها وضعها في موارد التطبيق القابلة للرسم.

يمكنك الاطّلاع على تنفيذ ميزات أداة التطبيق الجديدة في تطبيقَي StackView App Widget وWeather List Widget.

إشعارات شريط الحالة

تم توسيع نطاق واجهات برمجة تطبيقات Notification للتوافق مع المزيد من إشعارات شريط الحالات الغنية بالمحتوى، بالإضافة إلى فئة Notification.Builder الجديدة التي تتيح لك إنشاء عناصر Notification بسهولة.

وتشمل الميزات الجديدة:

  • إتاحة رمز كبير في الإشعار، باستخدام setLargeIcon(). ويكون ذلك عادةً للتطبيقات الاجتماعية لعرض صورة جهة الاتصال للشخص مصدر الإشعار أو لكي تعرض تطبيقات الوسائط صورة مصغّرة للألبوم.
  • إتاحة تنسيقات مخصّصة في شريط الحالة باستخدام setTicker()
  • دعم تنسيقات الإشعارات المخصّصة لتضمين أزرار PendingIntent، للمزيد من التطبيقات المصغّرة التفاعلية للإشعارات. على سبيل المثال، يمكن للإشعار التحكم في تشغيل الموسيقى بدون بدء أي نشاط.

أدوات تحميل المحتوى

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

ما عليك سوى تنفيذ واجهة LoaderCallbacks لتلقّي عمليات الاسترداد عند طلب برنامج تحميل جديد أو عند تغيّر البيانات، ثم يمكنك استدعاء الدالة initLoader() لإعداد أداة التحميل الخاصة بالنشاط أو الجزء.

لمزيد من المعلومات، اطّلِع على وثائق المحمّلات. يمكنك أيضًا الاطّلاع على مثال لرمز برمجي باستخدام برامج التحميل في النموذجَين LoaderCursor و LoaderThrottle.

واجهات برمجة تطبيقات Bluetooth A2DP وسماعات الرأس

يتضمّن Android الآن واجهات برمجة تطبيقات للتطبيقات بهدف التحقّق من حالة أجهزة الملف الشخصي لسمّاعات الرأس التي يتصل بها بلوتوث A2DP. على سبيل المثال، يمكن للتطبيقات تحديد وقت توصيل سماعة رأس بلوتوث للاستماع إلى الموسيقى وإبلاغ المستخدم حسبما تقتضي الحاجة. ويمكن للتطبيقات أيضًا تلقِّي عمليات بث لأوامر التكنولوجيا المساعدة (AT) الخاصة بالمورِّد وإبلاغ المستخدم بحالة الجهاز المتصل، مثلاً عند انخفاض طاقة بطارية الجهاز المتصل.

يمكنك إعداد BluetoothProfile ذي الصلة من خلال استدعاء getProfileProxy() باستخدام الملف الشخصي A2DP أو HEADSET وBluetoothProfile.ServiceListener لتلقّي عمليات معاودة الاتصال عندما يكون برنامج البلوتوث متصلاً أو غير متصل.

إطار عمل الرسوم المتحركة

يتيح لك إطار عمل الصور المتحركة المرن والجديد تمامًا إمكانية تحريك الخصائص العشوائية لأي كائن (عرض، أو قابل للرسم، أو جزء، أو كائن، أو أي شيء آخر). وتسمح لك بتحديد جوانب عديدة للحركة، مثل:

  • المدة
  • مقدار التكرار والسلوك
  • نوع استيفاء الوقت
  • يختار مصمم الرسوم المتحركة تشغيل الرسوم المتحركة معًا، أو بالتتابع، أو بعد تأخيرات محددة
  • مهلة إعادة تحميل الإطار

يمكنك تحديد جوانب الرسوم المتحركة هذه وغيرها، لقيم int وfloat واللون السداسي العشري للكائن بشكل افتراضي. أي، عندما يحتوي كائن على حقل خاصية لأحد هذه الأنواع، يمكنك تغيير قيمته بمرور الوقت للتأثير في الرسوم المتحركة. لتحريك أي نوع آخر من القيم، عليك إخبار النظام بكيفية حساب القيم لهذا النوع المعين، من خلال تنفيذ واجهة TypeEvaluator.

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

بالإضافة إلى ذلك، تتيح الفئة LayoutTransition رسومًا متحركة تلقائية لكل التغييرات التي تجريها على تنسيق نشاطك. لتفعيل عمليات النقل كجزء من التنسيق، يمكنك إنشاء كائن LayoutTransition وضبطه على أي ViewGroup عن طريق طلب البيانات من setLayoutTransition(). يؤدي هذا إلى تشغيل الرسوم المتحركة الافتراضية كلما تمت إضافة عناصر إلى المجموعة أو إزالتها منها. لتحديد صور متحركة مخصصة، استدعِ setAnimator() على LayoutTransition وقدِّم سمة Animator مخصّصة، مثل ValueAnimator أو ObjectAnimator التي تمت مناقشتها أعلاه.

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

إطار عمل واجهة المستخدم الموسّعة

  • الاختيار من متعدد في ListView وGridView

    يسمح وضع CHOICE_MODE_MULTIPLE_MODAL الجديد في setChoiceMode() للمستخدمين باختيار عدة عناصر من ListView أو GridView. وعند استخدامها بالتزامن مع شريط الإجراءات، يمكن للمستخدمين تحديد عناصر متعددة ثم تحديد الإجراء المطلوب تنفيذه من قائمة خيارات في شريط الإجراءات (والتي تم تحويلها إلى وضع إجراء متعدد الخيارات).

    لتفعيل ميزة الاختيار من متعدد، يُرجى الاتصال بـ setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL) وتسجيل MultiChoiceModeListener من خلال setMultiChoiceModeListener().

    عندما يضغط المستخدم ضغطًا مطوّلاً على عنصر ما، ينتقل شريط الإجراءات إلى وضع الإجراءات متعددة الخيارات. يرسل النظام إشعارًا إلى MultiChoiceModeListener عند اختيار العناصر من خلال طلب الرقم onItemCheckedStateChanged().

    للحصول على مثال للاختيار من متعدد، يُرجى الاطّلاع على فئة List15. JavaScript في نموذج تطبيق العروض التوضيحية لواجهة برمجة التطبيقات.

  • واجهات برمجة تطبيقات جديدة لتحويل طرق العرض

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

    تشمل الطرق الجديدة لضبط خصائص الملف الشخصي: setAlpha() وsetBottom() وsetLeft() وsetRight() وsetBottom() وsetPivotX() وsetPivotY() وsetRotationX() وsetRotationY() وsetScaleX() وsetScaleY() وsetAlpha() وغير ذلك.

    وتشتمل بعض الطرق أيضًا على سمة XML مقابلة يمكنك تحديدها في ملف التنسيق لتطبيق تحويل افتراضي. تشمل السمات المتاحة: translationX وtranslationY وrotation وrotationX وrotationY وscaleX وscaleY وtransformPivotX transformPivotY وalpha.

    وباستخدام بعض خصائص الملف الشخصي الجديدة هذه إلى جانب إطار عمل الرسوم المتحركة الجديد (الذي تمت مناقشته أعلاه)، يمكنك بسهولة تطبيق بعض الرسوم المتحركة الرائعة على طرق العرض. على سبيل المثال، لتدوير عرض على المحور ص، وفّر ObjectAnimator مع View، والسمة rotationY، وقيم البداية والنهاية:

    Kotlin

    ObjectAnimator.ofFloat(myView, "rotationY", 0f, 360f).apply {
        duration = 2000
        start()
    }
    

    Java

    ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
    animator.setDuration(2000);
    animator.start();
    
  • مظاهر جديدة ومجسَّمة

    تمت إعادة تصميم أدوات النظام العادية والمظهر العام ودمج مظهر جديد لواجهة المستخدم "مجسَّم". يطبق النظام المظهر الجديد باستخدام نظام النمط والمظهر القياسي.

    إنّ أي تطبيق يستهدف نظام Android 3.0 الأساسي، من خلال ضبط القيمة android:minSdkVersion أو android:targetSdkVersion على "11"، يكتسب المظهر المجسم تلقائيًا. ومع ذلك، إذا كان تطبيقك يطبق أيضًا المظهر الخاص به، سيحل المظهر محل المظهر المجسم، ما لم تعدّل أنماطك وتكتسب المظهر المجسم.

    لتطبيق المظهر المجسم على الأنشطة الفردية أو اكتسابها في تعريفات المظاهر الخاصة بك، استخدِم أحد المظاهر Theme.Holo الجديدة. إذا كان تطبيقك متوافقًا مع إصدار Android أقدم من 3.0 ويطبّق مظاهر مخصّصة، يجب اختيار مظهر استنادًا إلى إصدار النظام الأساسي.

  • تطبيقات مصغّرة جديدة
    • AdapterViewAnimator

      الفئة الأساسية لـ AdapterView التي تؤدي إلى عرض صور متحركة عند التبديل بين طرق العرض

    • AdapterViewFlipper

      علامة ViewAnimator بسيطة تتحرك بين مشاهدتَين أو أكثر تمّت إضافتهما إليه يتم عرض طفل واحد فقط في كل مرة. وعند طلب ذلك، يمكنه التبديل تلقائيًا بين كل طفل على حدة على فترات زمنية منتظمة.

    • CalendarView

      يسمح للمستخدمين باختيار التواريخ من التقويم عن طريق لمس التاريخ، ويمكن تمرير التقويم أو تمريره بسرعة إلى التاريخ المطلوب. ويمكنك ضبط نطاق التواريخ المتاحة في التطبيق المصغّر.

    • ListPopupWindow

      يتم تثبيت الصفحة في طريقة عرض المضيف وعرض قائمة خيارات، مثل قائمة من الاقتراحات عند الكتابة في طريقة عرض EditText.

    • NumberPicker

      تمكِّن المستخدم من اختيار رقم من نطاق محدَّد مسبقًا. تقدم الأداة حقلاً إدخالاً وزرين لأعلى ولأسفل لتحديد رقم. يتيح لمس حقل الإدخال للمستخدم إمكانية التمرير عبر القيم أو اللمس مرة أخرى لتعديل القيمة الحالية مباشرةً. ويسمح لك أيضًا بتعيين مواضع للسلاسل، بحيث يتم عرض السلسلة المقابلة بدلاً من موضع الفهرس.

    • PopupMenu

      لعرض Menu في نافذة منبثقة نمطية مثبّتة في عرض. تظهر النافذة المنبثقة أسفل عرض الارتساء إذا كان هناك مساحة أو أعلى منها في حال عدم توفّرها. في حال ظهور أداة IME (لوحة المفاتيح اللينة)، لن تتداخل النافذة المنبثقة مع أداة IME إلى أن يلمس المستخدم القائمة.

    • SearchView

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

    • StackView

      طريقة عرض تعرض عناصرها الثانوية في حزمة ثلاثية الأبعاد تسمح للمستخدمين بالتمرير خلال طرق العرض باستخدام دالة الاستبعاد المتبادل.

الرسومات

  • رسومات ثنائية الأبعاد مسرَّعة على الأجهزة

    يمكنك الآن تفعيل عارض OpenGL لتطبيقك من خلال ضبط android:hardwareAccelerated="true" في العنصر <application> ضمن عنصر البيان أو لعناصر <activity> الفردية.

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

  • عرض دعم طبقات الأجهزة والبرامج

    بشكل تلقائي، لا يتم تحديد أي طبقة في View. ويمكنك تحديد أن العرض مدعوم بطبقة جهاز أو برنامج، والتي تحدد القيم LAYER_TYPE_HARDWARE وLAYER_TYPE_SOFTWARE، باستخدام setLayerType() أو السمة layerType.

    طبقة الأجهزة مدعومة بزخرفة محددة للجهاز (عادةً كائنات Frame Buffer أو FBO على أجهزة OpenGL) وتؤدي إلى عرض العرض باستخدام مسار عرض أجهزة Android، ولكن فقط في حال تفعيل تسريع الأجهزة للتسلسل الهرمي لطريقة العرض. عند إيقاف تسريع الأجهزة، تعمل طبقات الأجهزة تمامًا مثل طبقات البرنامج.

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

    لمزيد من المعلومات، اطّلِع على مستندات LAYER_TYPE_HARDWARE وLAYER_TYPE_SOFTWARE.

  • محرك رسومات ثلاثية الأبعاد Renderscript

    Renderscript هو إطار عمل ثلاثي الأبعاد لوقت التشغيل يوفر واجهة برمجة تطبيقات (API) لإنشاء مشاهد ثلاثية الأبعاد بالإضافة إلى لغة تظليل خاصة مستقلة عن النظام الأساسي لتحقيق أفضل أداء. باستخدام Renderscript، يمكنك تسريع عمليات الرسومات ومعالجة البيانات. Renderscript هو طريقة مثالية لإنشاء تأثيرات ثلاثية الأبعاد عالية الأداء للتطبيقات والخلفيات ولوحات العرض الدوّارة والمزيد.

    للحصول على مزيد من المعلومات، يمكنك الاطّلاع على مستندات العرض الثلاثي الأبعاد والحوسبة باستخدام Renderscript.

الوسائط

  • فيديو في وضع "التسريع الزمني"

    تتيح واجهات برمجة تطبيقات كاميرا الفيديو الآن إمكانية تسجيل فيديو باستخدام وضع "التسريع الزمني". يضبط setCaptureRate() معدّل التقاط الإطارات.

  • توافُق المظهر عند بث الصور

    تتيح لك علامة SurfaceTexture الجديدة التقاط صورة لبثّ الصورة كزخرفة OpenGL ES. من خلال استدعاء setPreviewTexture() لمثيل Camera، يمكنك تحديد SurfaceTexture التي تريد من خلالها رسم إطارات تشغيل الفيديو أو المعاينة من الكاميرا.

  • البث المباشر باستخدام بروتوكول HTTP

    يمكن للتطبيقات الآن تمرير عنوان URL لقائمة تشغيل M3U إلى إطار عمل الوسائط لبدء جلسة بث مباشر عبر HTTP. يتوافق إطار عمل الوسائط مع معظم مواصفات البث المباشر عبر HTTP، بما في ذلك معدل نقل البيانات التكيُّفي. راجع مستند تنسيقات الوسائط المتوافقة للحصول على مزيد من المعلومات.

  • بيانات EXIF

    يتضمن ExifInterface حقولاً جديدة لفتحة عدسة الصورة وحساسية الضوء (ISO) ووقت التعرض للضوء.

  • الملفات الشخصية في كاميرات الفيديو

    تتيح لك طريقة hasProfile() الجديدة والعديد من الملفات الشخصية لجودة الفيديو (مثل QUALITY_1080P وQUALITY_720P وQUALITY_CIF وغيرها) تحديد خيارات جودة كاميرا الفيديو.

  • نقل ملفات الوسائط الرقمية

    يشمل النظام الأساسي دعمًا مضمّنًا لبروتوكول نقل الوسائط/الصور (MTP/PTP) عبر USB، مما يتيح للمستخدمين نقل أي نوع من ملفات الوسائط بسهولة بين الأجهزة وإلى كمبيوتر المضيف. ويمكن للمطوّرين الاستفادة من هذا الدعم وإنشاء تطبيقات تتيح للمستخدمين إنشاء أو إدارة ملفات الوسائط التفاعلية التي قد يريدون نقلها أو مشاركتها على الأجهزة.

  • إدارة الحقوق الرقمية (DRM)

    إطار عمل جديد لإدارة الحقوق الرقمية الموسعة (DRM) للتحقق من الحقوق الرقمية وتنفيذها. ويتم تنفيذه في طبقتين معماريتين:

    • هي واجهة برمجة تطبيقات لإطار عمل DRM، والتي تكون ظاهرة للتطبيقات ويتم تشغيلها من خلال الجهاز الافتراضي Dalvik VM للتطبيقات العادية.
    • يشير هذا المصطلح إلى مدير لإدارة الحقوق الرقمية (DRM) للرمز الأصلي والذي ينفِّذ واجهة برمجة التطبيقات لإطار العمل ويعرض واجهة للمكوِّنات الإضافية لإدارة الحقوق الرقمية لمعالجة إدارة الحقوق وفك تشفير الأنظمة المختلفة لإدارة الحقوق الرقمية.

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

    وبالنسبة إلى الشركات المصنِّعة للأجهزة ومالكي المحتوى ومزوّدي الوسائط الرقمية على الإنترنت، توفّر واجهة برمجة التطبيقات للمكوّن الإضافي لإطار عمل إدارة الحقوق الرقمية (DRM) وسيلة لإضافة دعم نظام إدارة الحقوق الرقمية من اختياره إلى نظام Android، وذلك من أجل تنفيذ حماية المحتوى بشكلٍ آمن.

    لا يوفر إصدار المعاينة أي مكوّن إضافي أصلي لإدارة الحقوق الرقمية للتحقق من الحقوق الرقمية وتنفيذها. ومع ذلك، يمكن للشركات المصنّعة للأجهزة شحن مكوّنات DRM الإضافية مع أجهزتها.

    يمكنك العثور على جميع واجهات برمجة تطبيقات DRM في حزمة android.drm.

إتاحة استخدام لوحة المفاتيح

  • إتاحة أدوات التعديل في Control وMeta وCaps Lock وNum Lock و Scroll Lock. لمزيد من المعلومات، يُرجى الاطّلاع على META_CTRL_ON والحقول ذات الصلة.
  • دعم لوحات المفاتيح الكاملة بنمط سطح المكتب، بما في ذلك إتاحة استخدام مفاتيح مثل Escape وHome وEnd وحذف وغيرها. يمكنك تحديد ما إذا كان مصدر الأحداث الرئيسية هو لوحة مفاتيح كاملة من خلال طلب البحث في getKeyboardType() والتحقّق من KeyCharacterMap.FULL.
  • تتيح "TextView" الآن القص والنسخ واللصق واختيار الكل استنادًا إلى لوحة المفاتيح باستخدام مجموعات المفاتيح Control+X وControl+C وControl+V وControl+A. وهي تتيح أيضًا الانتقال إلى الصفحة الرئيسية أو الصفحة لأسفل، أو الصفحة الرئيسية أو النهاية، وتحديد النص استنادًا إلى لوحة المفاتيح.
  • يضيف KeyEvent العديد من الطرق الجديدة لتسهيل التحقق من حالة المعدّل الرئيسي بشكل صحيح ومتّسق. إلى hasModifiers(int)، hasNoModifiers()، metaStateHasModifiers()، metaStateHasNoModifiers().
  • يمكن للتطبيقات تنفيذ اختصارات لوحة مفاتيح مخصّصة من خلال الفئات الفرعية Activity أو Dialog أو View وتنفيذ onKeyShortcut(). يستدعي إطار العمل هذه الطريقة كلما يتم دمج مفتاح مع مفتاح التحكم. عند إنشاء قائمة الخيارات، يمكنك تسجيل اختصارات لوحة المفاتيح من خلال ضبط السمة android:alphabeticShortcut أو android:numericShortcut لكل عنصر في <item> (أو باستخدام setShortcut()).
  • يتضمّن Android 3.0 جهازًا جديدًا من "لوحة المفاتيح الافتراضية" بالمعرّف KeyCharacterMap.VIRTUAL_KEYBOARD. تحتوي لوحة المفاتيح الافتراضية على خريطة مفاتيح الولايات المتحدة بنمط سطح المكتب، وهي مفيدة لتجميع الأحداث الرئيسية من أجل اختبار الإدخال.

أحداث اللمس المنقسمة

في السابق، كان بإمكان طريقة عرض واحدة فقط قبول أحداث اللمس في آنٍ واحد. يدعم Android 3.0 تقسيم أحداث اللمس بين طرق العرض وحتى النوافذ، لذلك يمكن لطرق العرض المختلفة قبول أحداث اللمس المتزامنة.

ويتم تمكين أحداث اللمس المنقسمة بشكل افتراضي عندما يستهدف أحد التطبيقات الإصدار Android 3.0. وذلك عندما يضبط التطبيق قيمة السمة android:minSdkVersion أو السمة android:targetSdkVersion على "11".

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

  • تتيح لك السمة android:splitMotionEvents لمجموعات طرق العرض إيقاف أحداث اللمس المنقسمة التي تحدث بين طرق العرض الفرعية في تنسيق. مثلاً:
    <LinearLayout android:splitMotionEvents="false" ... >
        ...
    </LinearLayout>
    

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

  • تتيح لك خاصية النمط android:windowEnableSplitTouch إيقاف أحداث اللمس المقسّمة على النوافذ، من خلال تطبيقها على مظهر للنشاط أو للتطبيق بأكمله. مثلاً:
    <style name="NoSplitMotionEvents" parent="android:Theme.Holo">
        <item name="android:windowEnableSplitTouch">false</item>
        ...
    </style>
    

    عند تطبيق هذا المظهر على <activity> أو <application>، لا يتم قبول سوى أحداث اللمس ضمن فترة النشاط الحالية. على سبيل المثال، عند إيقاف أحداث اللمس المقسّمة على النوافذ، لا يمكن لشريط النظام تلقّي أحداث اللمس في الوقت نفسه الذي يحدث فيه النشاط. لا يؤثّر ذلك في ما إذا كانت المشاهدات داخل النشاط يمكن أن تقسّم أحداث اللمس. وحسب الإعدادات التلقائية، يمكن أن يستمر النشاط في تقسيم أحداث اللمس على طرق العرض المختلفة.

    لمزيد من المعلومات حول إنشاء مظهر، اقرأ تطبيق الأنماط والمظاهر.

مجموعة أدوات الويب

  • فئة WebViewFragment جديدة لإنشاء جزء مؤلف من WebView.
  • طُرق WebSettings الجديدة:
    • يتيح لك "setDisplayZoomControls()" إخفاء عناصر التحكّم في التكبير أو التصغير على الشاشة مع السماح للمستخدم بالتكبير أو التصغير باستخدام إيماءات الأصابع (يجب ضبط setBuiltInZoomControls() على true).
    • تتيح لك طريقة WebSettings الجديدة، وهي setEnableSmoothTransition()، تفعيل انتقال سلس عند التصوير الشامل والتكبير/التصغير. عند التفعيل، سيختار WebView حلاً لتحقيق أفضل أداء (على سبيل المثال، قد لا يتم تعديل محتوى WebView أثناء الانتقال).
  • طُرق WebView الجديدة:
    • استدعاء onPause()، لإيقاف أي معالجة مرتبطة بمكوّن WebView مؤقتًا عندما تصبح مخفية. ويفيد هذا في تقليل حركة البيانات غير الضرورية لوحدة المعالجة المركزية (CPU) أو الشبكة عندما لا تكون نافذة WebView في المقدّمة.
    • معاودة الاتصال بـ onResume()، لاستئناف المعالجة المرتبطة بمكوّن WebView، التي تم إيقافها مؤقتًا خلال onPause().
    • يتيح لك saveWebArchive() حفظ العرض الحالي كأرشيف ويب على الجهاز.
    • تبدأ دالة showFindDialog() البحث النصي في طريقة العرض الحالية.

المتصفح

يضيف تطبيق المتصفح الميزات التالية لدعم تطبيقات الويب:

  • التقاط محتوى الوسائط

    وفقًا لمواصفات التقاط وسائط HTML، يسمح المتصفّح لتطبيقات الويب بالوصول إلى إمكانات التقاط الصوت والصور والفيديوهات للجهاز. على سبيل المثال، يوفر رمز HTML التالي مدخلاً للمستخدم لالتقاط صورة لتحميلها:

    <input type="file" accept="image/*;capture=camera" />
    

    أو من خلال استبعاد المَعلمة capture=camera، يمكن للمستخدم اختيار التقاط صورة جديدة باستخدام الكاميرا أو اختيار صورة من الجهاز (مثلاً من تطبيق "المعرض").

  • اتجاه الجهاز

    كما هو موضّح في مواصفات حدث اتجاه الجهاز، يسمح المتصفّح لتطبيقات الويب بالاستماع إلى أحداث DOM التي تقدّم معلومات حول الاتجاه الفعلي للجهاز وحركة الجهاز.

    ويتم التعبير عن اتجاه الجهاز بالمحورين "س" و"ص" و"ع"، بالدرجات، ويتم التعبير عن الحركة من خلال بيانات التسارع ومعدّل الدوران. يمكن لصفحة ويب التسجيل في فعاليات توجيهية من خلال استدعاء window.addEventListener مع نوع الفعالية "deviceorientation" والتسجيل في فعاليات الحركة من خلال تسجيل نوع الحدث "devicemotion".

  • الإحالات الناجحة الثلاثية الأبعاد لـ CSS

    كما هو موضح في مواصفات وحدة تحويل CSS الثلاثي الأبعاد، يسمح المتصفح بتحويل العناصر التي تعرضها CSS إلى ثلاثة أبعاد.

برامج المساعدة JSON

ستساعدك الصفوف الجديدة، JsonReader وJsonWriter، في قراءة وكتابة ساحات المشاركات بتنسيق JSON. تُكمّل واجهات برمجة التطبيقات الجديدة فئات org.json، التي تعالج مستند في الذاكرة.

يمكنك إنشاء مثيل لـ JsonReader من خلال استدعاء طريقة الدالة الإنشائية الخاصة بها وتمرير InputStreamReader التي تغذي سلسلة JSON. بعد ذلك، يمكنك بدء قراءة كائن من خلال استدعاء beginObject()، وقراءة اسم مفتاح باستخدام nextName()، وقراءة القيمة باستخدام طرق تتعلق بالنوع، مثل nextString() وnextInt()، ومتابعة تنفيذ ذلك عندما يكون hasNext() صحيحًا.

يمكنك إنشاء مثيل لـ JsonWriter من خلال استدعاء الدالة الإنشائية وتمرير OutputStreamWriter المناسبة. بعد ذلك، اكتب بيانات JSON بطريقة تشبه القارئ، وذلك باستخدام name() لإضافة اسم سمة وطريقة value() مناسبة لإضافة القيمة المعنيّة.

تكون هذه الفئات صارمة بشكل تلقائي. باستخدام طريقة setLenient() في كل فئة، تضبطهم بحيث يكونون أكثر تحررًا في ما يقبلونه. يتوافق وضع التحليل الذي يراعي التساهل أيضًا مع المحلِّل اللغوي التلقائي في org.json.

ثوابت الميزات الجديدة

يجب استخدام عنصر <uses-feature> لإعلام الكيانات الخارجية (مثل Google Play) بمجموعة ميزات الأجهزة والبرامج التي يعتمد عليها تطبيقك. في هذا الإصدار، يضيف Android الثوابت الجديدة التالية التي يمكن للتطبيقات الإعلان عنها باستخدام هذا العنصر:

  • "android.hardware.faketouch"

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

    إذا كان تطبيقك لا يتطلب إيماءات معقّدة ولا تريد فلترة تطبيقك من الأجهزة المزوّدة بشاشة تعمل باللمس في وضع المحاكاة، عليك تعريف "android.hardware.faketouch" باستخدام عنصر <uses-feature>. وبهذه الطريقة، سيتاح تطبيقك لأكبر عدد من أنواع الأجهزة، بما في ذلك الأجهزة التي لا توفر سوى إدخال شاشة في وضع المحاكاة للشاشة.

    إنّ جميع الأجهزة المزوّدة بشاشة تعمل باللمس تتوافق أيضًا مع "android.hardware.faketouch"، لأنّ إمكانيات الشاشة التي تعمل باللمس تضم مجموعة كبيرة من إمكانيات ميزة "التماس المزيف". وبالتالي، ما لم تكن بحاجة إلى شاشة تعمل باللمس، عليك إضافة عنصر <uses-feature> لإجراء تزوير.

الأذونات الجديدة

  • "android.permission.BIND_REMOTEVIEWS"

    يجب تعريف هذا الإذن كإذن مطلوب في عنصر بيان <service> لتنفيذ RemoteViewsService. على سبيل المثال، عند إنشاء تطبيق مصغّر يستخدم RemoteViewsService لتعبئة عرض المجموعة، قد يبدو إدخال البيان على النحو التالي:

    <service android:name=".widget.WidgetService"
        android:exported="false"
        android:permission="android.permission.BIND_REMOTEVIEWS" />
    

التقنيات الجديدة للنظام الأساسي

  • مساحة التخزين
    • دعم نظام الملفات ext4 لتفعيل تخزين eMMC الداخلي.
    • نظام ملفات FUSE لدعم أجهزة MTP
    • دعم وضع مضيف USB لدعم لوحات المفاتيح ولوحات وصل USB.
    • دعم بروتوكول نقل الوسائط (MTP)/بروتوكول PTP
  • نظام التشغيل Linux Kernel
    • تمت الترقية إلى 2.6.36
  • Dalvik VM
    • رمز جديد لدعم SMP وتحسينه
    • تحسينات مختلفة على البنية الأساسية لأجهزة JIT
    • تحسينات على مجمّعات القمامة:
      • تم الضبط للتوافق مع بروتوكول SMP
      • دعم لأحجام لقطات أكبر مخصصة لكومة العناصر
      • معالجة موحَّدة للصور النقطية والمخازن المؤقتة للبايت
  • مكتبات "دالفيك" الأساسية
    • تطبيق جديد وأسرع بكثير لـ NIO (مكتبة I/O الحديثة)
    • تم تحسين رسائل الاستثناء
    • تصحيح الأخطاء والأداء

تقرير الاختلافات في واجهة برمجة التطبيقات

للحصول على عرض تفصيلي لجميع التغييرات في واجهة برمجة التطبيقات في الإصدار Android 3.0 (المستوى 11 من واجهة برمجة التطبيقات)، يمكنك الاطّلاع على تقرير الاختلافات في واجهة برمجة التطبيقات.

مستوى واجهة برمجة التطبيقات

يقدم نظام Android 3.0 إصدارًا محدثًا من واجهة برمجة التطبيقات لإطار العمل. ويتم تخصيص معرّف عدد صحيح 11 لواجهة برمجة التطبيقات لنظام التشغيل Android 3.0، ويتم تخزينه في النظام نفسه. ويتيح هذا المعرّف، المسمى "مستوى واجهة برمجة التطبيقات"، للنظام تحديد ما إذا كان التطبيق متوافقًا مع النظام بشكل صحيح قبل تثبيت التطبيق.

لاستخدام واجهات برمجة التطبيقات التي تم تقديمها في نظام التشغيل Android 3.0 في تطبيقك، يجب تجميع التطبيق في مكتبة Android التي تتوفر في النظام الأساسي لحزمة تطوير البرامج (SDK) لنظام التشغيل Android 3.0. بناءً على احتياجاتك، قد تحتاج أيضًا إلى إضافة السمة android:minSdkVersion="11" إلى العنصر <uses-sdk> في بيان التطبيق. إذا تم تصميم تطبيقك بحيث لا يعمل إلا على الإصدار 2.3 من نظام التشغيل Android والإصدارات الأحدث، فإن الإعلان عن السمة يمنع تثبيت التطبيق على الإصدارات السابقة من النظام الأساسي.

لمزيد من المعلومات، يُرجى الاطّلاع على القسم ما هو مستوى واجهة برمجة التطبيقات؟