Text في React Native

من موسوعة حسوب

مكوّن React لعرض النصوص.

يدعم المكوّن ‎‎Text‎‎ النصوص المتداخلة والتنسيق ومعالجة اللمسات.

في المثال التالي، يرث العنوان المتداخل والنص الأساسي خاصيّة fontFamily من ‎‎styles.baseText‎‎، لكن العنوان يوفّر أنماطا إضافية خاصة به. سيتم تكديس العنوان والنص الأساسي فوق بعضهما البعض عند الوصول إلى محارف الأسطر الجديدة (literal newlines):

import React, { Component } from 'react';
import { Text, StyleSheet } from 'react-native';

export default class TextInANest extends Component {
  constructor(props) {
    super(props);
    this.state = {
      titleText: "Bird's Nest",
      bodyText: 'This is not really a bird nest.'
    };
  }

  render() {
    return (
      <Text style={styles.baseText}>
        <Text style={styles.titleText} onPress={this.onPressTitle}>
          {this.state.titleText}{'\n'}{'\n'}
        </Text>
        <Text numberOfLines={5}>
          {this.state.bodyText}
        </Text>
      </Text>
    );
  }
}

const styles = StyleSheet.create({
  baseText: {
    fontFamily: 'Cochin',
  },
  titleText: {
    fontSize: 20,
    fontWeight: 'bold',
  },
});

النصوص المتداخلة

يتيح كل من نظامي iOS وAndroid عرض نص منسق عن طريق التعليق (annotating) على نطاقاتِ سلسلةٍ نصيّة بتنسيقات محددة لجعله نصًّا غامقًا أو ملونًا مثلًا (‎‎NSAttributedString‎‎ على iOS و‎‎SpannableString‎‎ على Android). عمليًّا، هذا شاق للغاية. في React Native، يُمكن استخدام صيغة الويب لهذا الغرض، حيث يمكنك تدخيل النص لتحقيق التأثير نفسه.

import React, { Component } from 'react';
import { Text } from 'react-native';

export default class BoldAndBeautiful extends Component {
  render() {
    return (
      <Text style={{fontWeight: 'bold'}}>
        I am bold
        <Text style={{color: 'red'}}>
          and red
        </Text>
      </Text>
    );
  }
}

وراء الكواليس، يُحوِّل React Native هذا إلى سلسلة NSAttributedString نصيّة مسطحة أو سلسلة SpannableString نصيّة تحتوي على المعلومات التالية:

"I am bold and red"
0-9: bold
9-17: bold, red

الحاويات

عنصرُ ‎‎<Text>‎‎ فريدٌ (unique) بالنسبة إلى التخطيط (relative to layout): لم يعد كل شيء بداخله يستخدم تخطيط flexbox بل يستخدم تخطيط النص. هذا يعني أن العناصر الموجودة داخل عنصر ‎‎<Text>‎‎ لم تعد مستطيلة الشكل، ولكنها تلتف (wrap) عندما تصل إلى نهاية السطر.

<Text>
  <Text>First part and </Text>
  <Text>second part</Text>
</Text>
// حاوية
// Text
// سيكون النص في نفس السطر إن سمحت المساحة بذلك
// |First part and second part|

// إن نفِدَت المساحة، فسيتصرف النص وكأنه كتلة واحدة
// |First part |
// |and second |
// |part       |

<View>
  <Text>First part and </Text>
  <Text>second part</Text>
</View>

// حاوية
// View
// كل نصّ يُعدّ كتلة منفصلة

// |First part and|
// |second part   |

// إن نفِدَت المساحة، سيجري النص داخل كتلته الخاصة
// |First part |
// |and        |
// |second part|


وراثة أنماط محدودة

على الويب، الطريقة المعتادة لتعيين خطٍّ وحجم خطٍّ للمستند بأكمله هي الاستفادة من خصائص CSS الموروثة كما يلي:

html {
  font-family: 'lucida grande', tahoma, verdana, arial, sans-serif;
  font-size: 11px;
  color: #141823;
}

سوف ترث جميع العناصر الموجودة في المستند هذا الخط ما لم تُحدِّد هي (أي العناصر) أو أحد عناصرها الأجداد قاعدةً جديدة.

في React Native، الأمر أشدّ صرامة، إذ عليك تغليف جميع العقد النصية (text nodes) داخل مكوّن‎‎<Text>‎‎. لا يمكن وضع عقدة نصية مباشرة أسفل مكوّن ‎‎<View>‎‎.

// سيرمي هذا خطأً، لا يمكن وضع عقدة نصية داخل المكون
// <View>
<View>
  Some text
</View>

// هذا هو الصواب
<View>
  <Text>
    Some text
  </Text>
</View>

ستفقد أيضًا القدرة على تعيين خطٍّ افتراضيّ لشجرة فرعية بالكامل. و الخاصيّة fontFamily لا تقبل سوى اسم خط واحد، وهذا مختلف عن الخاصية ‎‎font-family‎‎ في CSS. الطريقة الموصى بها لاستخدام خطوطٍ وأحجامٍ موحّدة عبر تطبيقك هي إنشاء مكوّن باسم ‎‎MyAppText‎‎ مثلًا يتضمن هذه الخاصيات واستخدام هذا المكون في تطبيقك. يمكنك أيضًا استخدام هذا المكون لإنشاء مكونات أكثر تحديدًا مثل مكوّنِ MyAppHeaderText لأنواع أخرى من النصوص.

<View>
  <MyAppText>
    Text styled with the default font for the entire application
  </MyAppText>
  <MyAppHeaderText>Text styled as a header</MyAppHeaderText>
</View>

بافتراض أن MyAppText مكونٌ لا يعرض سوى مكوناته الأبناء داخل مُكون Text مع تنسيق محدّد، فيمكن تعريف المكوّن MyAppHeaderText على النحو التالي:

class MyAppHeaderText extends Component {
  render() {
    return (
      <MyAppText>
        <Text style={{fontSize: 20}}>{this.props.children}</Text>
      </MyAppText>
    );
  }
}

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

مفهوم وراثة الأنماط ما زال موجودًا في React Native، ولكنّه يقتصر على أشجار النصوص الفرعيّة (text subtrees). في هذه الحالة، سيكون الجزء الثاني غامقًا وأحمرًا:

<Text style={{fontWeight: 'bold'}}>
  I am bold
  <Text style={{color: 'red'}}>and red</Text>
</Text>

نعتقد أن هذه الطريقة الأكثر تقييدًا لتنسيق النصوص ستوفر تطبيقاتٍ أفضل:

  • (المطور) صُمِّمَت مكوّنات React مع أخذ العزل التام بعين الاعتبار: يجب أن تكون قادرًا على إسقاط مكون في أي مكان في تطبيقك، واثقًا من أنه طالما أن الخاصيّات متشابهة، فستبدو وتتصرف بنفس الطريقة. خصائص النصوص القادرة على الوراثة من خارج الخاصيات ستكسر هذا العزل.
  • (المُطبِّق [Implementor]) تطبيق شيفرة React Native تُبسَّط كذلك. لا نحتاج إلى حقلِ fontFamily في كل عنصرٍ، ولا نحتاج إلى عبور الشجرة إلى الجذر في كل مرة تُعرَض فيها عقدة نصية. لا تُشفَّر وراثة النمط إلا داخل مكون النص الأصيل ولا يُسرَّبُ إلى مُكوِّنات أخرى أو إلى النظام نفسه.

الخاصيات

‎‎accessible‎‎

عندما تكون قيمتُها القيمةَ ‎‎true‎‎، فهذا يُشير إلى أنّ العرضَ هو عنصرُ إمكانيةِ الوصول (accessibility element). افتراضيًّا، جميع العناصر القابلة للمس هي عناصر إمكانية وصول.

النوع مطلوب
قيمة منطقيّة لا

‎‎accessibilityLabel‎‎

يستبدِل النص الذي يقرأه قارئ الشاشة عندما يتفاعل المستخدم مع العنصر. افتراضيًا، يُنشأ الملصق (label) عن طريق العبور عبر جميع المكوّنات وتجميع كافة العقد النصية مفصولةً بمسافة.

النوع مطلوب
سلسلة نصيّة لا

‎‎accessibilityHint‎‎

يُساعد تلميح إمكانية الوصول (accessibility hint) المستخدمينَ على فهم ما سيحدث عندما يقومون بإجراءٍ على عنصر إمكانية الوصول عندما لا تكون النتيجة واضحةً من مُلصَق إمكانية الوصول.

النوع مطلوب
سلسلة نصيّة لا

‎‎accessibilityRole‎‎

تقوم الخاصيّة accessibilityRole بتوصيل الغرض من المكون (أي دَوره) إلى مُستخدمِ تقنيةٍ مساعدة (assistive technology).

يُمكن للخاصيّة ‎‎accessibilityRole‎‎ أن تحمل أحد القيم التالية:

  • ‎‎'none'‎‎ - تُستخدَم عندما لا يكون للعنصر أي دور.
  • ‎‎'button'‎‎ - تستخدم عندما تجب معاملة العنصر كزر.
  • ‎‎'link'‎‎ - تستخدم عندما تجب معاملة العنصر كرابط.
  • ‎‎'search'‎‎ - تستخدم عندما تجب معاملة عنصر حقل النص كعنصر بحث كذلك.
  • ‎‎'image'‎‎ - تستخدم عندما تجب معاملة العنصر كصورة. يمكن دمجها مع زرٍ أو رابطٍ مثلا.
  • ‎‎'keyboardkey'‎‎ - تستخدم عندما يتصرَّف العنصرُ كمفتاح لوحة مفاتيح.
  • ‎‎'text'‎‎ - تستخدم عندما تجب معاملة العنصر كنص ثابت لا يمكن تغييره.
  • ‎‎'adjustable'‎‎ - تستخدم عندما يمكن "تعديل" العنصر (مثل شريط تمريرٍ [slider]).
  • ‎‎'imagebutton'‎‎ - تستخدم عندما تجب معاملة العنصر كزرٍ مع كونِه صورة في نفس الوقت.
  • ‎‎'header'‎‎ - تستخدم عندما يتصرف عنصرٌ كترويسةٍ (header) لقسمِ محتوى (كعنوان شريط التنقل).
  • ‎‎'summary'‎‎ - تستخدم عندما يمكن استخدام عنصر ما لتقديم ملخص سريع للظروف الحالية في التطبيق عند بدء تشغيل التطبيق لأول مرة.
  • ‎‎'alert'‎‎ - تستخدم عندما يحتوي عنصر على نص مهم لعرضه للمستخدم.
  • ‎‎'checkbox'‎‎ - تستخدم عندما يمثل عنصر مربعًا يمكن تحديده أو إلغاء تحديده أو في حالة تحديد مختلطة.
  • ‎‎'combobox'‎‎ - تستخدم عندما يمثل عنصر مربع تحرير وسرد (combo box)، مما يسمح للمستخدم بالاختيار من بين عدة خيارات.
  • ‎‎'menu'‎‎ - تستخدم عندما يكون المكون قائمةً من الخيارات.
  • ‎‎'menubar'‎‎ - تستخدم عندما يكون المكون عبارة عن حاوية متعددة القوائم.
  • ‎‎'menuitem'‎‎ - تستخدم لتمثيل عنصرٍ داخل قائمة.
  • ‎‎'progressbar'‎‎ - تستخدم لتمثيل مكون يشير إلى تقدم المهمة (شريط تقدم).
  • ‎‎'radio'‎‎ - تستخدم لتمثيل زر اختيار.
  • ‎‎'radiogroup'‎‎ - تستخدم لتمثيل مجموعة من أزرار الاختيار.
  • ‎‎'scrollbar'‎‎ - تستخدم لتمثيل شريط تمرير.
  • ‎‎'spinbutton'‎‎ - تستخدم لتمثيل زر يفتح قائمة من الخيارات.
  • ‎‎'switch'‎‎ - تستخدم لتمثيل مُحوِّلة يمكن تشغيلها وإيقاف تشغيلها.
  • ‎‎'tab'‎‎ - تستخدم لتمثيل علامة تبويب.
  • ‎‎'tablist'‎‎ - تستخدم لتمثيل قائمة من علامات التبويب.
  • ‎‎'timer'‎‎ - تستخدم لتمثيل مؤقت.
  • ‎‎'toolbar'‎‎ - تستخدم لتمثيل شريط أدوات (حاوية من أزرارٍ ومكوّنات إجراءات).
النوع مطلوب
سلسلة نصيّة لا

‎‎accessibilityState‎‎

تصف الحالة الحالية لمكوّنٍ ما لمستخدمِ تقنيةٍ مساعدة.

انظر دليل إمكانية الوصول لمزيد من المعلومات.

النوع مطلوب
‎‎object: {disabled: bool, selected: bool, checked: bool or 'mixed', busy: bool, expanded: bool}‎‎ لا

‎‎adjustsFontSizeToFit‎‎

تُحدِّد ما إذا كان يجب تصغير الخطوط تلقائيًا لتناسب قيود النمط المُعطاة.

النوع مطلوب المنصة
قيمة منطقيّة لا iOS

‎‎allowFontScaling‎‎

لتحديد ما إذا كان يجب تغيير حجم الخطوط لاحترام إعدادات حجم النص الخاصة بإمكانية الوصول. القيمة الافتراضية هي ‎‎true‎‎.

النوع مطلوب
قيمة منطقيّة لا

‎‎dataDetectorType‎‎

يُحدِّد أنواع البيانات المحوَّلَة إلى عناوين URL قابلةٍ للنقر في عنصر النص. افتراضيًا، لا يتم اكتشاف أي أنواع بيانات.

يمكنك تحديد نوع واحد فقط.

القيم المحتملة للخاصيّة ‎‎dataDetectorType‎‎ هي:

  • 'phoneNumber'
  • 'link'
  • 'email'
  • 'none'
  • 'all'
النوع مطلوب المنصة
‎‎enum('phoneNumber', 'link', 'email', 'none', 'all')‎‎ لا Android

‎‎disabled‎‎

يُحدّد الحالة المعطلة لعرض النص لأغراض الاختبار.

النوع مطلوب المنصة
قيمة منطقيّة لا Android

‎‎ellipsizeMode‎‎

عندما تُعيَّن قيمة للخاصيّة ‎‎numberOfLines‎‎، فإنّ هذه الخاصيَّة تُحدِّد كيفية اقتطاع النص. يجب تعيين قيمة للخاصيّة numberOfLines بالتزامن مع هذه الخاصيّة.

يمكن أن تحمل أحد القيم التالية:

  • ‎‎head‎‎: يُعرَض السطر بحيث توضع النهاية في الحاوية ويتم الإشارة إلى النص المفقود في بداية السطر بواسطة علامة إضمار. أي ‎‎...wxyz‎‎ مثلا.
  • ‎‎middle‎‎: يُعرض السطر بحيث يتم احتواء البداية والنهاية في الحاوية ويتم الإشارة إلى النص المفقود في المنتصف بواسطة علامة إضمار. أي ‎‎ab...yz‎‎ مثلا.
  • ‎‎tail‎‎: يتم عرض السطر بحيث يتم احتواء البداية في الحاوية ويتم الإشارة إلى النص المفقود في نهاية السطر بواسطة علامة إضمار. أي ‎‎abcd...‎‎ مثلا.
  • ‎‎clip‎‎: لا يتم رسم الأسطر بعد حافة حاوية النص.

القيمة الافتراضيّة هي ‎‎tail‎‎.

النوع مطلوب
‎‎enum('head', 'middle', 'tail', 'clip')‎‎ لا

‎‎maxFontSizeMultiplier‎‎

يُحدد أكبر مقياس ممكن يمكن أن يصل إليه الخط عند تمكين الخاصيّة ‎‎allowFontScaling‎‎. القيم الممكنة:

  • ‎‎null/undefined‎‎: (القيمة الافتراضية): ترث من العقدة الأب أو القيمة الافتراضيّة العامّة (‎‎0‎‎).
  • ‎‎0‎: لا حدَّ أقصى، وتَجاهَل قيمة الأب أو القيمة الافتراضية العامّة.
  • ‎‎>= 1‎: تُعيِّن قيمةَ الخاصيّةِ ‎‎maxFontSizeMultiplier‎‎ الخاصة بهذه العقدة إلى هذه القيمة.
النوع مطلوب
عدد لا

‎‎minimumFontScale‎‎

يُحدِّد أصغر مقياس ممكن يمكن أن يصل إليه الخط عند تمكين الخاصية ‎‎adjustsFontSizeToFit‎‎. (القيم من ‎‎0.01‎‎ إلى ‎‎1.0‎‎).

النوع مطلوب المنصة
عدد لا iOS

‎‎nativeID‎‎

تُستخدَم لتحديد موقع هذا العرض من الشيفرة الأصليّة.

النوع مطلوب
سلسلة نصيّة لا

‎‎numberOfLines‎‎

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

تُستخدم هذه الخاصيّة بشكل شائع مع الخاصية ‎‎ellipsizeMode‎‎.

النوع مطلوب
عدد لا

‎‎onLayout‎‎

دالةٌ تُستدعى عند حدوث تغيّرات التركيب والتخطيط مع الحدث ‎‎{nativeEvent: {layout: {x, y, width, height}}}‎‎.

النوع مطلوب
دالة لا

‎‎onLongPress‎‎

تُستدعى هذه الدالة عند الضغط لفترة طويلة. يمكن استعمالها على الشكل التالي مثًلا: ‎‎onLongPress={this.increaseSize}>‎‎.

النوع مطلوب
دالة لا

‎‎onMoveShouldSetResponder‎‎

هل هذا العرض "يتطلّب" الاستجابة للّمس (touch responsiveness)؟ تُستدعى هذه الدالة في كل حركة لمسٍ على المكوّن ‎‎View‎‎ عندما لا يكون المستجيب (the responder).

‎‎View.props.onMoveShouldSetResponder: (event) => [true | false]‎‎، بحيثُ يكون ‎‎event‎‎ حدثَ لمسٍ اصطناعي (synthetic touch event) كما هو موضح أعلاه.

النوع مطلوب
دالة لا

‎‎onPress‎‎

تُستدعى هذه الدالة عند الضغط على العرض. يمكن استخدامها مثلًا بالشكل التالي: ‎‎onPress={() => console.log('1st')}‎‎.

النوع مطلوب
دالة لا

‎‎onResponderGrant‎‎

يستجيب العرض الآن لأحداث اللمس. هذا هو الوقت المناسب لإبراز وإظهار ما يحدث للمستخدم. مثال: ‎‎View.props.onResponderGrant: (event) => {}‎‎، بحيث يكون ‎‎event‎‎ حدثَ لمسٍ اصطناعيّ كما هو موضح أعلاه.

النوع مطلوب
دالة لا

‎‎onResponderMove‎‎

عندما يُحرِّك المستخدمُ إصبعه. مثال: ‎‎View.props.onResponderMove: (event) => {}‎‎، بحيث يكون ‎‎event‎‎ حدثَ لمسٍ اصطناعيّ كما هو موضح أعلاه.

النوع مطلوب
دالة لا

‎‎onResponderRelease‎‎

دالةٌ تُستدعى عند نهاية اللمس. مثال: ‎‎_‎‎، بحيث يكون ‎‎event‎‎ حدثَ لمسٍ اصطناعيّ كما هو موضح أعلاه.

النوع مطلوب
دالة لا

‎‎onResponderTerminate‎‎

دالةٌ تُستدعى عندما يُأخَذ المستجيب من العرض. قد تأخذه عروض أخرى بعد استدعاء ‎‎onResponderTerminationRequest‎‎، أو قد يأخذه نظام التشغيل دون طلب (يحدث هذا مع مركز التحكم أو مركز التنبيهات على iOS مثلًا) مثال: ‎‎View.props.onResponderTerminate: (event) => {}‎‎، بحيث يكون ‎‎event‎‎ حدثَ لمسٍ اصطناعيّ كما هو موضح أعلاه.

النوع مطلوب
دالة لا

‎‎onResponderTerminationRequest‎‎

دالة تُستدعى عندما يريد عرضٌ آخر أن يصبح مستجيبًا ويطلب من هذا العرض تحرير المستجيب الخاص به. إعادة القيمة ‎‎true‎‎ يسمح بإطلاقه.

مثال: ‎‎View.props.onResponderTerminationRequest: (event) => {}‎‎، بحيث يكون ‎‎event‎‎ حدثَ لمسٍ اصطناعيّ كما هو موضح أعلاه.

النوع مطلوب
دالة لا

‎‎onStartShouldSetResponderCapture‎‎

إذا أراد مُكوِّن ‎‎View‎‎ منع مُكوِّنِ ‎‎View‎‎ ابنٍ من أن يصبح مستجيبًا عند بداية اللمس، فيجب أن يحتويَ على هذا المعالج مُعيدًا القيمة ‎‎true‎‎.

مثال: ‎‎View.props.onStartShouldSetResponderCapture: (event) => [true | false]‎‎، بحيث يكون ‎‎event‎‎ حدثَ لمسٍ اصطناعيّ كما هو موضح أعلاه.

النوع مطلوب
دالة لا

‎‎onTextLayout‎‎

‎‎pressRetentionOffset‎‎

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

النوع مطلوب
‎‎object: {top: number, left: number, bottom: number, right: number}‎‎ لا

‎‎selectable‎‎

يتيح للمستخدم تحديد النص لاستخدام وظيفة النسخ واللصق الأصيلتين.

النوع مطلوب
قيمة منطقيّة لا

‎‎selectionColor‎‎

لون إبراز (highlight color) النص.

النوع مطلوب المنصة
لون لا Android

‎‎style‎‎

النوع مطلوب
تنسيق لا
  • خاصيّات تنسيق المكوّن ‎‎View‎‎...
  • ‎‎textShadowOffset‎‎: كائن، ‎‎{width: number,height: number}‎‎
  • ‎‎color‎‎: لون
  • ‎‎fontSize‎‎: عدد.
  • ‎‎fontStyle‎‎: ثابت متعدد، ‎‎ .‎‎‎enum('normal', 'italic')‎‎‎
  • ‎‎fontWeight‎‎: ثابت متعدد، ‎‎enum('normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900')‎‎.

تُحدد وزن الخط. القيمتان ‎‎'normal'‎‎ و‎‎'bold'‎‎ مدعومتان من طرف معظم الخطوط. لا تحتوي جميع الخطوط على نسخةٍ لكل من القيم العدديّة، وفي هذه الحالة يتم اختيار الوزن الأقرب.

  • ‎‎lineHeight‎‎: عدد.
  • ‎‎textAlign‎‎: ثابت متعدد، ‎‎enum('auto', 'left', 'right', 'center', 'justify')‎‎. يحدد محاذاة النص. القيمة ‎‎justify‎‎ مدعومة فقط على iOS و Android Oreo (النسخة 8.0) أو أعلى (المستوى 26 أو أعلى من واجهة التطبيقات البرمجيّة). في نسخ Android الأقدم، سوف تعود القيمة إلى ‎‎left‎‎.
  • ‎‎textDecorationLine‎‎: ثابت متعدد، ‎‎enum('none', 'underline', 'line-through', 'underline line-through')‎‎.
  • ‎‎textShadowColor‎‎: لون
  • ‎‎fontFamily‎‎: سلسلة نصيّة.
  • ‎‎textShadowRadius‎‎: عدد.
  • ‎‎includeFontPadding‎‎: قيمة منطقيّة (Android). عيّن لها القيمة ‎‎false‎‎ لإزالة حشوة الخطوط الإضافية (extra font padding) المُخصَّصة لتوفير مساحةٍ لبعض الحروف الصاعدة (ascenders) والنازلة (descenders). في بعض الخطوط، يمكن لهذه الحشوة أن تجعل النص يبدو غير محاذٍ قليلاً عند توسيطه رأسياً. للحصول على أفضل النتائج، عيِّن كذلك القيمة ‎‎center‎‎ للخاصيّة ‎‎textAlignVertical‎‎. القيمة الافتراضيّة هي ‎‎true‎‎.
  • ‎‎textAlignVertical‎‎: ثابت متعدد (Android)، ‎‎enum('auto', 'top', 'bottom', 'center')‎‎.
  • ‎‎fontVariant‎‎: مصفوفة من الثوابت المتعدّدة (iOS)، ‎‎enum('small-caps', 'oldstyle-nums', 'lining-nums', 'tabular-nums', 'proportional-nums')‎‎.
  • ‎‎letterSpacing‎‎: عدد. زيادة أو تقليل التباعد بين الأحرف. القيمة الافتراضية هي‎‎0‎‎، والتي تعني عدم وجود أيّ مسافات إضافية بين الأحرف.

على iOS: سيتم تصيير المساحة الإضافية بعد كل حرف رسومي (glyph). على Android: مدعوم فقط منذ Android 5.0 - ستتجاهل الإصدارات الأقدم هذه السِّمة. لاحظ أنه ستُضافُ مساحة إضافية حول الحروف الرسومية (نصفُ المساحة على كل جانب)، والذي يختلف عن طريقة التصيير في iOS. من الممكن محاكاة تصيير iOS باستخدام سمات التخطيط (layout attributes)، كالهوامش السلبية (negative margins) مثلًا، وذلك حسب ما يُناسبك.

  • ‎‎textDecorationColor‎‎: لون (iOS)
  • ‎‎textDecorationStyle‎‎:ثابت متعدد (iOS)، ‎‎enum('solid', 'double', 'dotted', 'dashed')‎‎.
  • ‎‎textTransform‎‎:ثابت متعدد، ‎‎enum('none', 'uppercase', 'lowercase', 'capitalize')‎‎.
  • ‎‎writingDirection‎‎:ثابت متعدد (iOS)، ‎‎enum('auto', 'ltr', 'rtl')‎‎.

‎‎suppressHighlighting‎‎

عندما تكون قيمتها القيمةَ ‎‎true‎‎، لا يُجرى أي تغيير مرئي عند الضغط على النص. افتراضيًا، يُبرِز شكلٌ بيضاوي رمادي النصَّ عند الضغط لأسفل.

النوع مطلوب المنصة
قيمة منطقيّة لا iOS

‎‎testID‎‎

يُستخدَم لتحديد موقع هذا العرض في الاختبارات الشاملة (end-to-end tests).

النوع مطلوب
سلسلة نصيّة لا

‎‎textBreakStrategy‎‎

عيّن استراتيجية فاصل النص (text break) على المستوى 23 من واجهة برمجة تطبيقات Android أو أحدث، القيم المحتملة هي: ‎‎highQuality‎‎، ‎‎simple‎‎ (القيمة الافتراضية)، ‎‎balanced‎‎.

النوع مطلوب المنصة
‎‎enum('simple', 'highQuality', 'balanced')‎‎ لا Android

مشاكل معروفة

react-native#22811: لا تدعم عناصر النص المتداخلة سمَة ‎‎numberOfLines‎‎.

مصادر