عندما يتعلق الأمر بالتعامل مع إدارة التركيز في React Native لتطبيقات التلفزيون، قد يجد المطورون أنفسهم يمرون بخمس مراحل مألوفة (من الحزن):؟ ؟ ؟ ؟ ؟
تعد إدارة التركيز تحديًا فريدًا في تطوير تطبيقات التلفزيون، نظرًا للتجزئة عبر منصات التلفزيون التي أدت إلى مجموعة متنوعة من تقنيات إدارة التركيز. لقد اضطر المطورون إلى إنشاء واعتماد استراتيجيات متعددة لإدارة التركيز، وغالبًا ما يقومون بالتوفيق بين الحلول الخاصة بالمنصة جنبًا إلى جنب مع التجريدات عبر الأنظمة الأساسية. لا يتمثل التحدي المتمثل في التركيز في ضمان التعامل مع التركيز بشكل صحيح فحسب، بل في التعامل مع اختلافات النظام الأساسي. يتمتع Android TV وtvOS من Apple بمحركات تركيز أصلية مميزة يمكنك قراءة المزيد عنها في هذه المقالة التي كتبها زميلي @hellonehha.
في الأصل، كانت المستندات وواجهات برمجة التطبيقات الخاصة بالتلفزيون جزءًا من وثائق React Native الرئيسية. الآن، تم نقل معظم المحتوى الخاص بالتلفزيون إلى مشروع React-Native-TVOS.
"react-native": "npm:react-native-tvos@latest"
مشروع React-native-tvos عبارة عن حزمة مفتوحة المصدر توفر إضافات وملحقات لإطار عمل React Native الأساسي، مع التركيز بشكل خاص على دعم منصات Apple TV وAndroid TV. تتمحور معظم التغييرات في هذا المشروع حول التعامل مع التنقل القائم على التركيز على SmartTV باستخدام D-Pad في جهاز التحكم عن بعد. تتم صيانة المشروع بواسطة (المذهل!) دوغ لودر ويوصى به عادةً باعتباره الطريقة الأساسية للتعامل مع إدارة التركيز في تطبيقات React Native TV.
ومع ذلك، مثل العديد من المشاريع التي يديرها المجتمع، فقد تطور مشروع React-Native-TVOS بناءً على احتياجات المطورين، وهناك الآن طرق متعددة للتعامل مع التركيز. دعنا نستكشف المكونات والتحسينات الإضافية للمكونات الموجودة التي توفرها شركة React-Native-TVOS:
&&&]يوفر TVFocusGuideView الدعم لواجهة برمجة التطبيقات UIFocusGuide من Apple ويتم تنفيذه بنفس الطريقة مع Android TV، للمساعدة في ضمان إمكانية التنقل إلى عناصر التحكم القابلة للتركيز، حتى لو لم تكن متوافقة بشكل مباشر مع عناصر التحكم الأخرى - حسب رد الفعل الأصلي-TVOS.
على سبيل المثال، إليك شبكة مكونة من 10 مكونات قابلة للضغط معروضة داخل مكون TVFocusGuideView:
import { TVFocusGuideView } from 'react-native'; const TVFocusGuideViewExample = () => { const [focusedItem, setFocusedItem] = useState(null); const renderGridItem = number => (setFocusedItem(number)} onBlur={() => setFocusedItem(null)}> ); return ({number} {[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(num => renderGridItem(num))} > ); };
الوجهات الدعامة
import { TVFocusGuideView } from 'react-native'; const TVFocusGuideViewExample = () => { const [focusedItem, setFocusedItem] = useState(null); const renderGridItem = number => (باستخدام TVFocusGuideView يمكنك تعيين مجموعة من المكونات للتسجيل كـ "وجهات" لـ TVFocusGuideView. لنلقِ نظرة على مثالنا:setFocusedItem(number)} onBlur={() => setFocusedItem(null)}> ); return ({number} {[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(num => renderGridItem(num))} > ); };
import { TVFocusGuideView } from 'react-native'; const TVFocusGuideViewExample = () => { const [focusedItem, setFocusedItem] = useState(null); const renderGridItem = number => (يضمن هذا الدعامة عدم هروب التركيز من المكون الأصلي للاتجاهات المحددة. تضمن هذه الدعامة عدم هروب التركيز من المكون الأصلي للاتجاهات المحددة. لنلقِ نظرة على مثالنا:setFocusedItem(number)} onBlur={() => setFocusedItem(null)}> ); return ({number} {[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(num => renderGridItem(num))} > ); };
import { TVFocusGuideView } from 'react-native'; const TVFocusGuideViewExample = () => { const [focusedItem, setFocusedItem] = useState(null); const renderGridItem = number => (عند ضبط التركيز التلقائي على صحيح، سيدير TVFocusGuideView التركيز نيابةً عنك عن طريق إعادة توجيه التركيز إلى أول طفل يمكن التركيز عليه. كما أنه يتذكر آخر طفل تم التركيز عليه ويعيد توجيه التركيز إليه في الزيارات اللاحقة. إذا تم استخدام هذه الخاصية مع خاصية الوجهات، فستكون للمكون الذي تم تعيينه بواسطة خاصية الوجهات الأولوية. لنلقِ نظرة على مثالنا:setFocusedItem(number)} onBlur={() => setFocusedItem(null)}> ); return ({number} {[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(num => renderGridItem(num))} > ); };
على وجه التحديد، يتم تشغيل حدث onFocus عندما يكتسب العرض Touchable التركيز، ويتم تشغيل حدث onBlur عندما يفقد العرض التركيز. يمكّنك هذا من تطبيق نمط أو منطق فريد عندما يكون المكون في حالة التركيز التي لا تخرج من الصندوق مع React Native الأساسي.
بالإضافة إلى ذلك، تم تعديل طريقة onPress ليتم تشغيلها عندما يحدد المستخدم Touchable بالضغط على الزر "تحديد" الموجود على جهاز التحكم عن بعد الخاص بالتلفزيون (الزر الأوسط الموجود على جهاز التحكم عن بعد Apple TV أو الزر الأوسط الموجود على Android TV D-Pad ) ويتم تنفيذ الحدث onLongPress مرتين عند الضغط باستمرار على زر "تحديد" لمدة معينة.
3. قابل للضغط
على غرار حالة "الضغط" التي يتم تشغيلها عندما يضغط المستخدم على المكون على شاشة تعمل باللمس، يقدم مكون React-Native-tvos Pressable حالة مركزة تصبح حقيقية عندما يتم تركيز المكون على شاشة التلفزيون.
import { TVFocusGuideView } from 'react-native'; const TVFocusGuideViewExample = () => { const [focusedItem, setFocusedItem] = useState(null); const renderGridItem = number => (لننظر إلى مثال:setFocusedItem(number)} onBlur={() => setFocusedItem(null)}> ); return ({number} {[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(num => renderGridItem(num))} > ); };
import { TVFocusGuideView } from 'react-native'; const TVFocusGuideViewExample = () => { const [focusedItem, setFocusedItem] = useState(null); const renderGridItem = number => (setFocusedItem(number)} onBlur={() => setFocusedItem(null)}> ); return ({number} {[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(num => renderGridItem(num))} > ); };
خذ الوقت الكافي لاستكشاف حلول إدارة التركيز المتنوعة هذه حتى تتمكن من تقديم تجربة سهلة للتعامل مع التركيز البؤري لمستخدميك، بغض النظر عن منصة SmartTV التي يستخدمونها.
الموارد ذات الصلة
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3