قم بإنشاء أداة Android لتطبيقك

مؤلف: Lewis Jackson
تاريخ الخلق: 13 قد 2021
تاريخ التحديث: 1 تموز 2024
Anonim
انشاء تطبيق اندرويد بدون برمجة من الهاتف
فيديو: انشاء تطبيق اندرويد بدون برمجة من الهاتف

المحتوى


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

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

توفر التطبيقات المصغرة للتطبيق وجودًا قيماً على الشاشة الرئيسية للمستخدم

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

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


اقرأ أيضا: تطوير للأجهزة القابلة للطي: ما تحتاج إلى معرفته

ما هي الحاجيات لالروبوت؟

أداة التطبيق عبارة عن تطبيق مصغر خفيف الوزن يعيش على الشاشة الرئيسية للمستخدم.

يمكن أن توفر الأدوات المصغّرة لنظام Android نطاقًا من المحتوى ، ولكنها تندرج عمومًا في إحدى الفئات التالية:

  • القطعة المعلومات. هذه عبارة عن عنصر واجهة مستخدم غير قابل للتمرير يعرض بعض المعلومات ، مثل توقعات الطقس اليوم أو التاريخ والوقت.
  • جمع الحاجيات. هذه عبارة عن عنصر واجهة تعامل قابل للتمرير يعرض مجموعة من البيانات ذات الصلة ، ويتم تنسيقها على هيئة ListView أو GridView أو StackView أو AdapterViewFlipper. غالبًا ما يتم دعم عناصر واجهة المستخدم التجميعية بواسطة مصدر بيانات ، مثل قاعدة بيانات أو صفيف.
  • السيطرة على الحاجيات. تعمل هذه التطبيقات المصغرة كجهاز تحكم عن بعد يتيح للمستخدمين التفاعل مع التطبيق الخاص بك ، بدون الحاجة إلى إحضاره إلى المقدمة. غالبًا ما تحتوي التطبيقات التي تشغل الوسائط ، مثل البودكاست أو الموسيقى ، على أدوات تحكم تتيح للمستخدم تشغيل إجراءات التشغيل والإيقاف المؤقت والتخطي مباشرةً من شاشته الرئيسية.
  • الحاجيات المختلطة. في بعض الأحيان قد تكون قادرًا على تقديم تجربة مستخدم أفضل من خلال دمج عناصر من فئات متعددة. على سبيل المثال ، إذا كنت بصدد تطوير عنصر تحكم لعنصر تطبيق موسيقى ، فيمكنك توفير عناصر التحكم في التشغيل والإيقاف المؤقت والتخطي ، لكن قد تقرر أيضًا عرض بعض المعلومات ، مثل عنوان الأغنية وفنانها. إذا قررت الاختلاط والمطابقة ، فلا تنفد! تميل التطبيقات المصغّرة إلى تقديم أفضل تجربة للمستخدم عندما توفر سهولة الوصول إلى كمية صغيرة من المعلومات ذات الصلة في الوقت المناسب أو بعض الميزات الشائعة الاستخدام. للمساعدة في الحفاظ على عناصر واجهة المستخدم المختلطة خفيفة الوزن ، يوصى بتحديد الفئة الأساسية لعنصر واجهة المستخدم وتطويره وفقًا لهذه الفئة ، ثم أضف بعض العناصر من الفئة الثانوية لعنصر واجهة المستخدم.

هل يحتاج مشروعي حقًا إلى تطبيق مصغر؟

هناك العديد من الأسباب التي تجعلك تفكر في إضافة أداة تطبيق إلى مشروع Android.


تعمل الأدوات المصغرة لنظام Android على تحسين تجربة المستخدم

كقاعدة عامة ، كلما قل عدد الخطوات اللازمة لإتمام المهمة ، كانت تجربة المستخدم أفضل.

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

أقوى من اختصارات التطبيق

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

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

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

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

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

قم بإنشاء عنصر واجهة مستخدم Android لدفع مشاركة طويلة الأجل

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

اقرأ أيضا:البدء باستخدام Facebook لـ Android SDK

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

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

إنشاء تطبيق مصغر لمجموعة

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

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

قم بإنشاء مشروع Android جديد بالإعدادات التي تختارها ، ودعنا نبدأ!

بناء تخطيط القطعة الخاصة بك

للبدء ، دعونا نحدد واجهة مستخدم التطبيق المصغّر (UI).

يتم عرض عناصر واجهة تعامل التطبيق في العملية في الخارج تطبيقك ، بحيث يمكنك فقط استخدام التنسيقات وطرق العرض التي يدعمها RemoteViews.

عند إنشاء التصميم الخاص بك ، فأنت مقيد بما يلي:

  • ساعة عقارب
  • زر
  • الكونومتر الميقات
  • FrameLayout
  • GridLayout
  • ImageButton
  • ImageView
  • LinearLayout
  • شريط التقدم
  • تخطيط نسبي
  • عرض النص
  • ViewStub
  • AdapterViewFlipper
  • GridView
  • عرض القائمة
  • StackView
  • ViewFlipper

لاحظ أن الفئات الفرعية للفئات المذكورة أعلاه وطرق العرض هي ليس أيد.

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

نشر عنصر واجهة تعامل المجموعة

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

استيراد android.content.Context؛ استيراد android.content.Intent ؛ استيراد android.widget.RemoteViews ؛ استيراد android.widget.RemoteViewsService ؛ استيراد java.util.ArrayList؛ استيراد java.util.List؛ استيراد ثابت android.R.id.text1؛ قم باستيراد android.R.layout.simple_list_item_1 الثابت ؛ الطبقة العامة DataProvider تنفذ RemoteViewsService.RemoteViewsFactory {قائمة myListView = new ArrayList <> ()؛ السياق mContext = null؛ DataProvider العامة (سياق السياق ، نية الهدف) {mContext = context؛ }Override public void onCreate () {initData ()؛ }Override public void onDataSetChanged () {initData ()؛ }Override public void onDestroy () {}Override public int getCount () {return myListView.size ()؛ }Override publicViews getViewAt (int position) {RemoteViews view = new RemoteViews (mContext.getPackageName ()، simple_list_item_1)؛ view.setTextViewText (text1، myListView.get (position))؛ عرض العودة ؛ }Override publicViews getLoadingView () {return null؛ }Override public int getViewTypeCount () {return 1؛ }Override public getItemId (int position) طويلة الجمهور {return position؛ }Override public boolean hasStableIds () {return true؛ } private void initData () {myListView.clear ()؛ لـ (int i = 1 ؛ i <= 15 ؛ i ++) {myListView.add ("ListView item" + i)؛ }}}

AppWidgetProvider: تكوين القطعة الخاصة بك

لإنشاء عنصر واجهة مستخدم Android ، تحتاج إلى إنشاء عدة ملفات.

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

قم بإنشاء فئة Java جديدة (ملف> جديد> فئة Java) باسم CollectionWidget.

للبدء ، يجب أن تمتد جميع ملفات موفر التطبيق المصغّر من فئة AppWidgetProvider. نحتاج بعد ذلك إلى تحميل ملف مورد تخطيط list_widget.xml في كائن RemoteViews وإبلاغ AppWidgetManager بكائن RemoteViews المحدّث:

تعمل الفئة العامة CollectionWidget على توسيع AppWidgetProvider {static void updateAppWidget (سياق السياق ، AppWidgetManager appWidgetManager ، int appWidgetId) {// إضفاء الطابع الشخصي على كائن RemoteViews / طرق عرض RemoteViews = RemoteViews جديدة (سياق جديد RemoteViews) setRemoteAdapter (السياق ، وجهات النظر) ؛ // اطلب أن يقوم AppWidgetManager بتحديث عنصر واجهة تعامل التطبيق // appWidgetManager.updateAppWidget (appWidgetId ، المشاهدات) ؛ }

قم بإنشاء المحول

نظرًا لأننا نعرض بياناتنا في ListView ، نحتاج إلى تحديد طريقة setRemoteAdapter () في AppWidgetProvider لدينا. يعادل setRemoteAdapter () استدعاء AbsListView.setRemoteViewsAdapter () ولكن تم تصميمه ليتم استخدامه في عناصر واجهة تعامل التطبيق.

في هذه الطريقة ، نحتاج إلى تحديد معرف AdapterView (R.id.widget_list) وهدف الخدمة التي ستوفر في نهاية المطاف البيانات إلى RemoteViewsAdapter - سنقوم بإنشاء فئة WidgetService هذه قريبًا.

static void setRemoteAdapter (سياق السياق ، طرق عرضNonNull final RemoteViews) {views.setRemoteAdapter (R.id.widget_list ، هدف جديد (سياق ، WidgetService.class)) ؛ }}

تحديد أساليب دورة حياة القطعة

في AppWidgetProvider لدينا ، نحتاج أيضًا إلى تحديد أساليب دورة حياة عنصر واجهة المستخدم التالية:

استرداد محتوى جديد باستخدام onUpdate

طريقة دورة حياة عنصر واجهة المستخدم onUpdate () مسؤولة عن تحديث طرق عرض عنصر واجهة المستخدم الخاصة بك بمعلومات جديدة.

تسمى هذه الطريقة في كل مرة:

  • يقوم المستخدم بإجراء يقوم يدويًا بتشغيل طريقة onUpdate ().
  • لقد انقضت فترة التحديث المحددة للتطبيق.
  • يضع المستخدم مثيلًا جديدًا لهذه القطعة على شاشتها الرئيسية.
  • يتم إرسال هدف بث ACTION_APPWIDGET_RESTORED إلى AppWidgetProvider. يتم تشغيل هدف البث هذا إذا تمت استعادة عنصر واجهة المستخدم من النسخة الاحتياطية.

هذا هو المكان الذي ستُسجّل فيه أية معالجات أحداث يجب أن تستخدمها الأداة.

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

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

في المقتطف التالي ، أقوم بتحديث كل مثيل:

Override public void onUpdate (سياق السياق ، AppWidgetManager appWidgetManager ، int appWidgetIds) {for (int appWidgetId: appWidgetIds) {// تحديث جميع مثيلات عنصر واجهة المستخدم / / updateAppWidget (سياق ، appWidgetManager ، appWidgetId) ؛ } super.onUpdate (سياق ، appWidgetManager ، appWidgetIds) ؛ }

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

onEnabled: إجراء الإعداد الأولي

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

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

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

Override public void onEnabled (سياق السياق) {Toast.makeText (سياق ، "onEnabled يسمى"، Toast.LENGTH_LONG) .show ()؛ }

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

تنظيف ، مع onDisabled

يتم استدعاء أسلوب onDisabled () ردًا على ACTION_APPWIDGET_DISABLED ، والذي يتم تشغيله عندما يقوم المستخدم بحذف الاخير مثيل القطعة الخاصة بك.

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

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

Override public void onDisabled (سياق السياق) {Toast.makeText (سياق ، "onDisabled يسمى" ، Toast.LENGTH_LONG) .show ()؛ }

أكمل AppWidgetProvider

يجب أن يبدو ملف CollectionWidget الخاص بك الآن كما يلي:

استيراد android.appwidget.AppWidgetManager ؛ استيراد android.appwidget.AppWidgetProvider؛ استيراد android.content.Context؛ استيراد androidx.annotation.NonNull؛ استيراد android.content.Intent ؛ استيراد android.widget.RemoteViews ؛ استيراد android.widget.Toast ؛ // الامتداد من فئة AppWidgetProvider // الفئة العامة. تقوم CollectionWidget بتوسيع AppWidgetProvider {static void updateAppWidget (سياق السياق ، AppWidgetManager appWidgetManager ، int appWidgetId) {// قم بتحميل ملف مورد التخطيط إلى كائن RemoteViews (RemoteViews) جديد = RemoteViews (سياق جديد). getPackageName () ، R.layout.list_widget) ؛ setRemoteAdapter (السياق ، وجهات النظر) ؛ // إبلاغ AppWidgetManager عن كائن RemoteViews // appWidgetManager.updateAppWidget (appWidgetId ، المشاهدات) ؛ }Override public void onUpdate (سياق السياق ، AppWidgetManager appWidgetManager ، int appWidgetIds) {for (int appWidgetId: appWidgetIds) {updateAppWidget (context، appWidgetManager، appWidgetId)؛ } super.onUpdate (سياق ، appWidgetManager ، appWidgetIds) ؛ }Override public void onEnabled (سياق السياق) {Toast.makeText (السياق ، "onEnabled يسمى"، Toast.LENGTH_LONG) .show ()؛ }Override public void onDisabled (سياق السياق) {Toast.makeText (السياق ، "onDisabled يسمى"، Toast.LENGTH_LONG) .show ()؛ } static void setRemoteAdapter (سياق السياق ، طرق عرضNonNull final RemoteViews) {views.setRemoteAdapter (R.id.widget_list ، هدف جديد (سياق ، WidgetService.class)) ؛ }}

ملف AppWidgetProviderInfo

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

يتم تخزين ملف AppWidgetProviderInfo في مجلد res / xml الخاص بمشروعك.

إذا لم يكن مشروعك يحتوي بالفعل على هذا المجلد ، فستحتاج إلى إنشائه:

  • انقر مع الضغط على مفتاح التحكم في مجلد المشروع.
  • حدد جديد> دليل موارد Android.
  • في النافذة التالية ، افتح القائمة المنسدلة نوع المورد ، وحدد xml.
  • يجب تحديث اسم الدليل إلى xml تلقائيًا ، ولكن إذا لم يكن كذلك ، فستحتاج إلى تغييره يدويًا.
  • انقر فوق موافق.

بعد ذلك ، قم بإنشاء ملف collection_widget_info ، والذي سنستخدمه كملف AppWidgetProviderInfo لدينا:

  • انقر مع الضغط على Control على مجلد xml لمشروعك.
  • حدد جديد> ملف مورد XML.
  • اسم هذا الملف collection_widget_info.
  • انقر فوق موافق.

في ملف AppWidgetProviderInfo الخاص بنا ، نحتاج إلى تحديد الخصائص التالية:

1. الروبوت: معاينة الصورة

هذا هو الدرج الذي يمثل عنصر واجهة تعامل التطبيق الخاص بك في أداة منتقي القطعة بالجهاز.

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

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

سننشئ هذه الصورة بمجرد الانتهاء من إنشاء عنصر واجهة المستخدم الخاصة بنا ، لذا سأستخدم الآن مورد mipmap / ic_launcher الذي تم إنشاؤه تلقائيًا كصورة معاينة مؤقتة.

2. android: widgetCategory

يجب وضع عناصر واجهة تعامل التطبيق داخل App Appget Host ، والذي عادةً ما يكون الشاشة الرئيسية لنظام Android ، ولكن يمكن أن يكون أيضًا مُشغل جهة خارجية مثل Evie Launcher أو Nova Launcher.

بين مستويات API 17 و 20 ، كان من الممكن وضع عناصر واجهة تعامل التطبيق على الشاشة الرئيسية أو تم إهمال دعم lockscreen ، لكن دعم lockscreen في مستوى API 21.

يمكنك تحديد ما إذا كان يمكن وضع عنصر واجهة تعامل التطبيق على الشاشة الرئيسية ، أو شاشة قفل الشاشة (والتي يشير إليها Android باسم "keyguard") أو كليهما ، باستخدام سمة android: widgetCategory. نظرًا لأنه لا يمكن وضع التطبيقات المصغّرة على شاشة القفل في أحدث إصدارات Android ، سنستهدف الشاشة الرئيسية فقط.

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

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

3. android: initialLayout

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

4. android: resizeMode = "أفقي | رأسي"

تتيح لك السمة android: resizeMode تحديد ما إذا كان يمكن تغيير حجم عنصر واجهة المستخدم الخاصة بك أفقياً أو رأسياً أو على كلا المحورين.

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

5. android: minHeight و android: minWidth

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

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

6. android: updatePeriodMillis

AppWidgetProviderInfo هو المكان الذي ستحدد فيه أيضًا عدد المرات التي يجب أن تطلب فيها عنصر واجهة المستخدم معلومات جديدة.

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

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

يجب أيضًا أن تأخذ في الاعتبار نوع المحتوى الذي ستعرضه الأداة.

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

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

قراءة أيضا: AndroidManifest.xml كل ما تحتاج إلى معرفته

أخيرًا ، بمجرد تحديد الفاصل الزمني للتحديث المثالي ، قد ترغب في استخدام فاصل زمني أقصر عند تطوير التطبيق واختباره. على سبيل المثال ، يمكنك استخدام أقصر تردد تحديث ممكن (android: updatePeriodMillis = "1800000 ″) عندما تختبر أن طريقة onUpdate () للتطبيق الخاص بك يتم تشغيلها بشكل صحيح ، ثم قم بتغيير هذه القيمة قبل إطلاق تطبيقك على الجمهور العام.

AppWidgetProviderInfo المكتملة

يجب أن يبدو ملف collection_widget_info.xml النهائي مثل هذا:

لا تشوش الشاشة الرئيسية للمستخدم!

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

  • انقر مع الضغط على Control على مجلد قيم مشروعك.
  • حدد جديد> ملف مورد القيم.
  • إعطاء هذا الملف اسم dimens.
  • انقر فوق موافق.

افتح ملف dimens.xml وحدد قيم الهامش والحشو التالية:

10dp 8dp

إرسال البيانات إلى القطعة

بعد ذلك ، نحتاج إلى إنشاء خدمة عنصر واجهة مستخدم ، والتي ستكون مسؤولة عن إرسال بيانات المجموعة الخاصة بنا إلى الأداة.

قم بإنشاء فئة Java جديدة (جديد> Java Class) باسم WidgetService ، وقم بإضافة ما يلي:

استيراد android.content.Intent ؛ استيراد android.widget.RemoteViewsService ؛ تقوم WidgetService من الفئة العامة بتوسيع RemoteViewsService {Override RemoteViewsFactoryFunFal onGetViewFactory (Intent intent) {return new DataProvider (this، intent)؛ }}

تسجيل القطعة الخاصة بك في البيان

نحتاج الآن إلى إجراء بعض التغييرات على بيان مشروعنا.

للبدء ، افتح "البيان" وقم بتسجيل عنصر واجهة المستخدم كملف إذاعي. نحتاج أيضًا إلى إضافة مرشح نوايا لإجراء android.appwidget.action.APPWIDGET_UPDATE:

بعد ذلك ، تحتاج إلى تحديد موفر أداة التطبيق:

أخيرًا ، نحتاج إلى إعلان الخدمة التي سترسل البيانات إلى عنصر واجهة المستخدم ، والذي في هذه الحالة هو فئة WidgetService. تتطلب هذه الخدمة إذن android.permission.BIND_REMOTEVIEWS:

ضع القطعة الخاصة بك على المحك

إذا كنت تتابع هذا البرنامج التعليمي ، فسيكون لديك الآن عنصر واجهة تعامل مستخدم كامل يعرض مجموعة من البيانات على الشاشة الرئيسية للمستخدم.

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

  • قم بتثبيت هذا المشروع على هاتف ذكي متوافق مع Android أو الجهاز اللوحي أو AVD (جهاز Android الظاهري).
  • اضغط لفترة طويلة على أي قسم فارغ من الشاشة الرئيسية ، واختر Widgets عند المطالبة ؛ هذا تطلق منتقي القطعة.
  • مرر عبر Widget Picker حتى تجد أداة التطبيق التي أنشأتها للتو.
  • اضغط لفترة طويلة على هذه القطعة لإضافتها إلى شاشتك الرئيسية.
  • نظرًا لأن هذا هو أول مثيل لهذه الأداة المصغّرة ، فيجب تشغيل طريقة onEnabled () ، وسترى نخب "onEnabled يسمى".
  • تغيير حجم القطعة الخاصة بك. إذا قمت بتعيين الحد الأدنى للحجم المدعوم ، فتأكد من أنه لا يمكنك تقليص عنصر واجهة المستخدم بعد هذه القيمة.
  • اختبار أن ListView بالتمرير ، كما هو متوقع.
  • بعد ذلك ، يجب عليك التحقق من طريقة onDisabled () ، بحذف عنصر واجهة المستخدم. اضغط لفترة طويلة على القطعة ، ثم حدد إزالة من الشاشة الرئيسية. نظرًا لأن هذا هو المثيل الأخير من هذه الأداة المصغّرة ، يجب تشغيل طريقة onDisabled () وستشاهد نخب "onDisabled يسمى".

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

إنشاء صورة معاينة عنصر واجهة مستخدم Android

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

لتشجيع المستخدمين على تحديد عنصر واجهة المستخدم الخاصة بك ، يجب عليك تقديم صورة معاينة تبرز جميع المعلومات والميزات المفيدة التي تقدمها الأداة.

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

لاحظ أن معاينة القطعة غير مدرجة في أحدث صور نظام أندرويد ، لذلك ستحتاج إلى إنشاء AVD باستخدام Nougat (API مستوى 25) أو إصدار سابق:

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

  • سيتم الآن عرض عنصر واجهة المستخدم الخاصة بك على خلفية فارغة. اقض بعض الوقت في تغيير حجم الأداة وتعديلها حتى تظهر أفضل ما تقدمه القطعة.
  • بمجرد أن تكون راضيًا عن مظهر ومحتوى عنصر واجهة المستخدم لديك ، حدد Take Snapshot.

  • لاسترداد اللقطة ، عد إلى Android Studio وحدد View> Tool Windows> Device File Explorer من شريط الأدوات. يؤدي هذا إلى تشغيل مستكشف ملفات جهاز Android Studio.
  • في مستكشف ملف الجهاز ، انتقل إلى sdcard / Download. يجب أن تجد صورة المعاينة الخاصة بك محفوظة بالتنسيق التالي: _ori_.png

  • اسحب هذه الصورة من Android Studio وقم بإفلاتها في مكان يسهل الوصول إليه ، مثل سطح المكتب.
  • أعط ملف الصورة هذا اسمًا وصفيًا.
  • قم بسحب وإسقاط الملف في مجلد المشروع الخاص بك.
  • افتح AppWidgetProviderInfo الخاص بك ، وهو لهذا المشروع collection_widget_info.xml.
  • ابحث عن خط android: previewImage = "@ mipmap / ic_launcher" وقم بتحديثه للإشارة إلى صورة المعاينة.

ستستخدم عنصر واجهة المستخدم الآن مورد الصور الجديد هذا كصورة معاينة:

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

الحاجيات القابلة للتخصيص: إضافة نشاط التكوين

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

هناك عدة أسباب وراء رغبتك في إضافة نشاط تهيئة إلى مشروعك.

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

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

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

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

لن يقدر أي شخص القطعة التي تصطدم بصريًا مع بقية شاشتها الرئيسية!

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

دعنا نضيف نشاط التكوين إلى مشروعنا!

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

سأضيف الأزرار التالية إلى هذا التصميم:

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

إليك ملف config_activity.xml المكتمل:

إنشاء نشاط التكوين

الآن ، نحن بحاجة إلى إنشاء نشاط التكوين لدينا.

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

هدف النية = getIntent () ؛ حزم إضافية = intent.getExtras () ؛ if (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID، AppWidgetManager.INVALID_APPWIDGET_ID)؛ if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {finish ()؛ }

بعد ذلك ، نحتاج إلى إنشاء هدف عائد ، وتمرير appWidgetId الأصلي وتعيين النتائج من نشاط التكوين:

نية النتيجةValue = هدف جديد () ؛ resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID، appWidgetId)؛ setResult (RESULT_OK ، resultValue) ؛ إنهاء()؛ }}}

إذا قمت بتوفير نشاط تكوين ، فلن يتم إرسال بث ACTION_APPWIDGET_UPDATE تلقائيًا عند بدء نشاط التكوين ، مما يعني طريقة onUpdate () متعود يتم استدعاء عندما يقوم المستخدم بإنشاء مثيل القطعة الخاصة بك.

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

وإليك ConfigActivity المكتملة:

استيراد android.app.Activity ؛ استيراد android.appwidget.AppWidgetManager ؛ استيراد android.os.Bundle ؛ استيراد android.widget.Button ؛ استيراد android.content.Intent ؛ استيراد android.view.View ؛ استيراد android.view.View.OnClickListener؛ استيراد android.widget.Toast ؛ فئة ConfigActivity العامة تمدد النشاط {Override void onCreate (Bundle saveInstanceState) {super.onCreate (saveInstanceState)؛ setContentView (R.layout.config_activity)؛ setResult (RESULT_CANCELED)؛ button setupWidget = (Button) findViewById (R.id.setupWidget) ؛ setupWidget.setOnClickListener (جديد OnClickListener () {Override public void onClick (View v) {handleSetupWidget ()؛}})؛ button configButton = (Button) findViewById (R.id.configButton)؛ configButton.setOnClickListener (جديد OnClickListener () {Override public void onClick (View v) {handleConfigWidget ()؛}})؛ } private void handleSetupWidget () {showAppWidget ()؛ } private void handleConfigWidget () {Toast.makeText (ConfigActivity.this ، "خيارات التكوين" ، Toast.LENGTH_LONG) .show ()؛ } int appWidgetId؛ private void showAppWidget () {appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID؛ هدف النية = getIntent () ؛ حزم إضافية = intent.getExtras () ؛ if (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID، AppWidgetManager.INVALID_APPWIDGET_ID)؛ if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {finish ()؛ } // TO DO: إجراء التكوين // Intent resultValue = new Intent ()؛ resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID، appWidgetId)؛ setResult (RESULT_OK ، resultValue) ؛ إنهاء()؛ }}}

بمجرد إنشاء نشاط تكوين ، ستحتاج إلى الإعلان عن هذا النشاط في البيان وتحديد أنه يقبل إجراء APPWIDGET_CONFIGURE:

أخيرًا ، نظرًا لأن نشاط التكوين يُشار إليه خارج نطاق الحزمة ، نحتاج إلى إعلان هذا النشاط في AppWidgetProviderInfo ، والذي هو في هذه الحالة ملف collection_widget_info.xml:

الروبوت: تكوين = "com.jessicathornsby.collectionwidget.ConfigActivity">

اختبار المشروع الخاص بك

حان الوقت الآن لوضع مشروعك النهائي قيد الاختبار:

  • قم بتثبيت مشروعك المحدث على جهاز Android الفعلي أو AVD.
  • احذف جميع المثيلات السابقة لعنصر واجهة المستخدم الخاصة بك ، لضمان أنك تعمل مع أحدث إصدار.
  • اضغط لفترة طويلة على أي منطقة فارغة من الشاشة الرئيسية وحدد القطع عند المطالبة.
  • ابحث عن عنصر واجهة المستخدم في Widget Picker واضغط لفترة طويلة لتحديده.
  • إسقاط القطعة على الشاشة الرئيسية الخاصة بك. يجب أن يبدأ نشاط التكوين تلقائيًا.
  • امنح الزر "إجراء بعض التكوين" نقرة ، ويجب أن يظهر "نخب خيارات التكوين" ، مما يؤكد أن هذا التفاعل قد تم تسجيله بنجاح.
  • تخيل أنك قمت بتعديل إعدادات عنصر واجهة المستخدم وأصبحت الآن جاهزًا لوضعه على شاشتك الرئيسية ؛ إعطاء زر "إنشاء عنصر واجهة المستخدم" بنقرة واحدة ، ويجب إنشاء هذه الأداة بنجاح.

يمكنك تنزيل مشروع القطعة المصغّر المكتمل من GitHub.

تغليف

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

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

إذا قمت بإنشاء عنصر واجهة مستخدم Android ، فتأكد من مشاركة إبداعاتك في التعليقات أدناه!

لقد أضافت Google باستمرار مظاهر ليلية إلى تطبيقاتها. في غضون يومين ، تم رصد الوضع المظلم على Gmail لنظامي Android و Google Play tore. الآن ، أبلغ العديد من المستخدمين على Reddit أنهم يتلقون السمة الدا...

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

اقرأ اليوم