إنشاء صف لطريقة العرض

تجربة طريقة الإنشاء
Jetpack Compose هي مجموعة أدوات واجهة المستخدم المقترَحة لنظام التشغيل Android. تعرَّف على كيفية استخدام التنسيقات في Compose.

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

  • الامتثال لمعايير Android
  • عليك تقديم سمات ذات نمط مخصّص تتوافق مع تنسيقات Android XML.
  • إرسال أحداث تسهيل الاستخدام
  • أن تكون متوافقة مع أنظمة Android الأساسية المتعددة

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

يمكنك العثور على معلومات إضافية في مكوّنات طريقة العرض المخصّصة.

مشاهدة فئة فرعية

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

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

Kotlin

class PieChart(context: Context, attrs: AttributeSet) : View(context, attrs)

Java

class PieChart extends View {
    public PieChart(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
}

تحديد السمات المخصّصة

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

  • تحديد سمات مخصّصة لطريقة العرض في عنصر مورد <declare-styleable>
  • حدِّد قيم السمات في تنسيق XML.
  • استرداد قيم السمات في وقت التشغيل
  • يمكنك تطبيق قيم السمات التي تم استردادها على العرض.

يتناول هذا القسم كيفية تحديد السمات المخصّصة وتحديد قيمها. يتناول القسم التالي استرداد القيم وتطبيقها في وقت التشغيل.

لتحديد سمات مخصّصة، أضِف موارد <declare-styleable> إلى مشروعك. ومن المعتاد وضع هذه الموارد في ملف res/values/attrs.xml. إليك مثال على ملف attrs.xml:

<resources>
   <declare-styleable name="PieChart">
       <attr name="showText" format="boolean" />
       <attr name="labelPosition" format="enum">
           <enum name="left" value="0"/>
           <enum name="right" value="1"/>
       </attr>
   </declare-styleable>
</resources>

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

بعد تحديد السمات المخصّصة، يمكنك استخدامها في ملفات XML الخاصة بالتنسيق، تمامًا مثل السمات المضمَّنة. الفرق الوحيد هو أنّ السمات المخصّصة تنتمي إلى مساحة اسم مختلفة. بدلاً من الانضمام إلى مساحة الاسم http://schemas.android.com/apk/res/android، فإنّها تنتمي إلى http://schemas.android.com/apk/res/[your package name]. على سبيل المثال، إليك طريقة استخدام السمات المحدّدة للسمة PieChart:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:custom="http://schemas.android.com/apk/res-auto">
 <com.example.customviews.charting.PieChart
     custom:showText="true"
     custom:labelPosition="left" />
</LinearLayout>

لتجنُّب تكرار معرّف الموارد المنتظم (URI) الطويل لمساحة الاسم، يستخدم النموذج التوجيه xmlns. يخصّص هذا التوجيه الاسم المستعار custom لمساحة الاسم http://schemas.android.com/apk/res/com.example.customviews. يمكنك اختيار أي اسم مستعار تريده لمساحة الاسم.

لاحظ اسم علامة XML التي تضيف طريقة العرض المخصّصة إلى التنسيق. وهو الاسم المؤهّل بالكامل لفئة العرض المخصّص. إذا كانت فئة المشاهدة داخلية، يمكنك زيادة تأهيلها باستخدام اسم الفئة الخارجية لطريقة العرض. على سبيل المثال، تتضمّن الفئة PieChart فئة داخلية تُسمى PieView. لاستخدام السمات المخصّصة من هذه الفئة، عليك استخدام العلامة com.example.customviews.charting.PieChart$PieView.

تطبيق السمات المخصّصة

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

  • لم يتم حل مراجع الموارد ضمن قيم السمات.
  • لم يتم تطبيق الأنماط.

بدلاً من ذلك، مرِّر علامة AttributeSet إلى obtainStyledAttributes(). تعمل هذه الطريقة على تمرير مصفوفة TypedArray من القيم التي سبق أن تمت الإشارة إليها وتحديد نمطها.

يُجري برنامج تجميع موارد Android الكثير من الإجراءات لمساعدتك في تسهيل إجراء استدعاءات obtainStyledAttributes(). بالنسبة إلى كل مورد <declare-styleable> في الدليل res/، تحدّد السمة R.java التي يتم إنشاؤها مصفوفة من أرقام تعريف السمات ومجموعة من الثوابت التي تحدّد الفهرس لكل سمة في المصفوفة. ويمكنك استخدام الثوابت المحدّدة مسبقًا لقراءة السمات من TypedArray. في ما يلي طريقة قراءة السمات للفئة PieChart:

Kotlin

init {
    context.theme.obtainStyledAttributes(
            attrs,
            R.styleable.PieChart,
            0, 0).apply {

        try {
            mShowText = getBoolean(R.styleable.PieChart_showText, false)
            textPos = getInteger(R.styleable.PieChart_labelPosition, 0)
        } finally {
            recycle()
        }
    }
}

Java

public PieChart(Context context, AttributeSet attrs) {
   super(context, attrs);
   TypedArray a = context.getTheme().obtainStyledAttributes(
        attrs,
        R.styleable.PieChart,
        0, 0);

   try {
       mShowText = a.getBoolean(R.styleable.PieChart_showText, false);
       textPos = a.getInteger(R.styleable.PieChart_labelPosition, 0);
   } finally {
       a.recycle();
   }
}

يُرجى العلم بأنّ كائنات TypedArray هي مورد مشترك ويجب إعادة تدويرها بعد استخدامها.

إضافة المواقع والأحداث

السمات هي طريقة فعّالة للتحكّم في سلوك المشاهدات ومظهرها، ولكن لا يمكن الاطّلاع عليها إلا بعد إعداد المشاهدة. لتوفير سلوك ديناميكي، اعرض زوجَي getter وsetter لكل سمة مخصّصة. يعرض المقتطف التالي كيفية عرض PieChart لموقع يُسمى showText:

Kotlin

fun isShowText(): Boolean {
    return mShowText
}

fun setShowText(showText: Boolean) {
    mShowText = showText
    invalidate()
    requestLayout()
}

Java

public boolean isShowText() {
   return mShowText;
}

public void setShowText(boolean showText) {
   mShowText = showText;
   invalidate();
   requestLayout();
}

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

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

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

مراعاة تسهيل الاستخدام عند تصميم الموقع الإلكتروني

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

  • صنِّف حقول الإدخال باستخدام السمة android:contentDescription.
  • يمكنك إرسال أحداث تسهيل الاستخدام من خلال طلب الرقم sendAccessibilityEvent() عندما يكون ذلك مناسبًا.
  • دعم وحدات تحكُّم بديلة، مثل لوحة التحكّم أو كرة التعقب

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