SpannableString: یہ کیا ہے، اسٹائل کلاسیں اور یہ کیسے کام کرتا ہے

مصنف: IT Sectr اشاعت: 2026-07-23 مطالعے کا وقت: 10 منٹ

SpannableString Android SDK کی ایک کلاس ہے جو android.text پیکیج سے آتی ہے اور آپ کو TextView میں ایک ہی ٹیکسٹ سٹرنگ کے مختلف حصوں پر متعدد اسٹائل لاگو کرنے کی اجازت دیتی ہے۔ HTML مارک اپ کے برعکس، SpannableString Span آبجیکٹ کی سطح پر کام کرتی ہے، ٹیکسٹ کے بصری ڈسپلے کو کنٹرول کرتی ہے: رنگ، سائز، فونٹ، انڈر لائن اور انٹرایکٹو عناصر۔ Google Developers کے مطابق، SpannableString اینڈرائیڈ سسٹم کے اجزاء میں لنک فارمیٹنگ کے لیے استعمال ہوتی ہے۔ یہ تیسری پارٹی کی لائبریریوں کے بغیر ٹیکسٹ اسٹائل کرنے کا بنیادی طریقہ ہے۔

اہم نکات

  • SpannableString — Span آبجیکٹ کے ذریعے ٹیکسٹ اسٹائل کرنے کے لیے Android کلاس، تخلیق کے بعد ناقابل تغیر
  • اسپین دو قسم کے ہوتے ہیں: CharacterStyle (انفرادی حروف) اور ParagraphStyle (مکمل پیراگراف)
  • ForegroundColorSpan ٹیکسٹ کا رنگ بدلتا ہے، StyleSpan بولڈ اور اٹالک کے لیے ذمہ دار
  • SpannableStringBuilder — Editable سپورٹ کے ساتھ متحرک ٹیکسٹ تعمیر کے لیے قابل تغیر ورژن
  • Span فلیگ رینج کی حدود میں ٹیکسٹ داخل یا حذف کرتے وقت اسپین کے رویے کا تعین کرتے ہیں

SpannableString کیا ہے؟

SpannableString ایک Android کلاس ہے جو Spannable انٹرفیس کو لاگو کرتی ہے، ٹیکسٹ کو Span آبجیکٹ کے ایک سیٹ کے ساتھ ذخیرہ کرتی ہے جو بصری ڈسپلے کو کنٹرول کرتے ہیں۔ عام String کے برعکس، SpannableString مخصوص حروف کی رینج میں اسٹائل کی خصوصیات منسلک کرنے کی اجازت دیتی ہے: ٹیکسٹ کے حصے کو سرخ بنانا، ہیڈنگ میں فونٹ کا سائز بڑھانا، یا پیراگراف کے اندر کلک کرنے کے قابل لنک شامل کرنا۔

یہ کلاس android.text پیکیج میں ہے اور API Level 1 سے دستیاب ہے۔ SpannableString ناقابل تغیر ہے — ایک بار بنانے کے بعد اس کی ساخت مقرر ہو جاتی ہے، اور ٹیکسٹ تبدیل کرنے کے لیے نیا آبجیکٹ بنانا پڑتا ہے۔ متحرک ترمیم کے لیے SpannableStringBuilder استعمال کیا جاتا ہے، جو اسٹائل کھوئے بغیر حروف داخل اور حذف کرنے کی حمایت کرتا ہے۔

CharSequence سے فرق

CharSequence ٹیکسٹ ڈیٹا کے لیے بنیادی انٹرفیس ہے، جسے String، StringBuilder اور SpannableString لاگو کرتے ہیں۔ SpannableString اور String کے درمیان بنیادی فرق سب سٹرنگ میں صوابدیدی آبجیکٹ منسلک کرنے کی حمایت ہے۔ TextView Spannable انٹرفیس کو پہچانتا ہے اور رینڈرنگ کے دوران متعلقہ ٹیکسٹ حصوں پر اسپین آبجیکٹ لاگو کرتا ہے۔ اگر آپ TextView میں عام String پاس کرتے ہیں، تو کوئی اسٹائل لاگو نہیں ہوگا۔

اندرونی ساخت

SpannableString ٹیکسٹ کو char[] ارے کے طور پر اور اسپین آبجیکٹ کو شروع اور اختتامی پوزیشن کے میٹا ڈیٹا کے ساتھ ایک علیحدہ ارے میں ذخیرہ کرتی ہے۔ جب setSpan(what, start, end, flags) کال کیا جاتا ہے، تو what آبجیکٹ رینج کی معلومات کے ساتھ فہرست میں محفوظ ہو جاتا ہے۔ رینڈرنگ کے دوران، TextView دکھائی جانے والی رینج میں آنے والے تمام اسپین کو ترتیب وار لاگو کرتا ہے، updateDrawState اور updateMeasureState کے طریقوں کو کال کرتا ہے۔

اسپین کی اقسام: CharacterStyle اور ParagraphStyle

CharacterStyle اسپین کے لیے بنیادی کلاس ہے جو لائنوں میں ان کی پوزیشن سے قطع نظر انفرادی حروف کو متاثر کرتی ہے۔ اس میں ForegroundColorSpan (ٹیکسٹ رنگ)، RelativeSizeSpan (نسبتی سائز)، StyleSpan (بولڈ اور اٹالک)، UnderlineSpan (انڈر لائن) اور دیگر شامل ہیں۔ کریکٹر اسپین مخصوص رینج میں ہر حرف پر انفرادی طور پر لاگو ہوتے ہیں۔

ParagraphStyle اسپین کے لیے ایک انٹرفیس ہے جو مکمل پیراگراف کو متاثر کرتا ہے۔ سب سے مشہور نمائندہ AlignmentSpan ہے، جو پورے پیراگراف کو بائیں، مرکز یا دائیں سیدھ میں رکھتا ہے۔ پیراگراف اسپین کو پورے پیراگراف کا احاطہ کرنا چاہیے؛ ورنہ، Android ان کے اطلاق کو نظر انداز کرتا ہے۔ یہ حد اس لیے ہے کیونکہ سیدھ یا انڈینٹیشن صرف ایک مکمل ٹیکسٹ بلاک کے لیے معنی رکھتی ہے۔

Span فلیگ

Span فلیگ چار مستقل ہیں جو اسپین کے رویے کی تعریف کرتے ہیں جب اس کی رینج کی حدود میں ٹیکسٹ داخل یا حذف کیا جاتا ہے۔ SPAN_EXCLUSIVE_EXCLUSIVE اسپین کو صرف اصل حدود کے اندر فعال رکھتا ہے، SPAN_INCLUSIVE_INCLUSIVE حدود میں ٹیکسٹ شامل کرنے پر اسے وسعت دیتا ہے۔ SPAN_EXCLUSIVE_INCLUSIVE اور SPAN_INCLUSIVE_EXCLUSIVE رینج کے شروع اور آخر کے لیے مخلوط رویہ فراہم کرتے ہیں۔

فلیگبائیں طرف داخل کرنادائیں طرف داخل کرنا
SPAN_EXCLUSIVE_EXCLUSIVEشامل نہیں کرتاشامل نہیں کرتا
SPAN_INCLUSIVE_INCLUSIVEشامل کرتا ہےشامل کرتا ہے
SPAN_EXCLUSIVE_INCLUSIVEشامل نہیں کرتاشامل کرتا ہے
SPAN_INCLUSIVE_EXCLUSIVEشامل کرتا ہےشامل نہیں کرتا

صحیح فلیگ کا انتخاب EditText میں Editable ٹیکسٹ کے لیے اہم ہے، جہاں صارف حروف داخل اور حذف کر سکتا ہے۔ صرف پڑھنے والے TextView کے لیے، عام طور پر SPAN_EXCLUSIVE_EXCLUSIVE استعمال ہوتا ہے — اسٹائل صرف اصل رینج پر لاگو ہوتا ہے اور پروگرامی تبدیلیوں کے ساتھ وسعت نہیں پاتا۔

Android SDK میں اہم اسپین کلاسیں

Android SDK 25 سے زیادہ بلٹ ان اسپین کلاسز فراہم کرتا ہے جو زیادہ تر ٹیکسٹ اسٹائلنگ کے کاموں کا احاطہ کرتی ہیں۔ ہر کلاس CharacterStyle یا ParagraphStyle انٹرفیس کو لاگو کرتی ہے اور اپنے کنسٹرکٹر کے ذریعے پیرامیٹرز قبول کرتی ہے۔ تمام کلاسیں android.text.style پیکیج میں ہیں اور اضافی انحصار کے بغیر دستیاب ہیں۔

رنگ اور پس منظر کے اسپین

ForegroundColorSpan مخصوص رینج کے لیے ٹیکسٹ کا رنگ سیٹ کرتا ہے، int فارمیٹ میں رنگ قبول کرتا ہے۔ BackgroundColorSpan ٹیکسٹ کے پیچھے پس منظر کو رنگ دیتا ہے، تلاش کے نتائج کو نمایاں کرنے کے لیے مفید ہے۔ AbsoluteSizeSpan پکسلز میں صحیح فونٹ سائز سیٹ کرتا ہے، RelativeSizeSpan TextView میں بنیادی ٹیکسٹ سائز کے نسبت ضریب لاگو کرتا ہے۔

ٹائپ فیس اسپین

StyleSpan Typeface.NORMAL، Typeface.BOLD، Typeface.ITALIC یا BOLD_ITALIC مستقل قبول کرتا ہے اور حروف کی ٹائپ فیس تبدیل کرتا ہے۔ UnderlineSpan انڈر لائن شامل کرتا ہے، StrikethroughSpan سٹرائک تھرو شامل کرتا ہے۔ SuperscriptSpan اور SubscriptSpan سپر اسکرپٹ اور سب اسکرپٹ بناتے ہیں۔ TypefaceSpan ٹیکسٹ رینج کے لیے Typeface آبجیکٹ کے ذریعے کسٹم فونٹ سیٹ کرنے کی اجازت دیتا ہے۔

انٹرایکٹو اسپین

ClickableSpan کلک کرنے کے قابل ٹیکسٹ سیگمنٹ بنانے کے لیے ایک تجریدی کلاس ہے۔ ٹیپ کرنے پر، onClick() طریقہ کال ہوتا ہے۔ کلکس کے کام کرنے کے لیے، TextView میں setMovementMethod(LinkMovementMethod.getInstance()) ہونا چاہیے۔ URLSpan ہائپر لنکس کے لیے ClickableSpan کی ذیلی کلاس ہے جو خود بخود براؤزر کھولتی ہے۔ ClickableSpan کو اکثر ForegroundColorSpan کے ساتھ ملایا جاتا ہے تاکہ لنک کو نیلے رنگ میں بصری طور پر نمایاں کیا جا سکے۔

kotlin
val spannable = SpannableString("Open developer.android.com")
spannable.setSpan(
    URLSpan("https://developer.android.com"),
    9, 31, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
spannable.setSpan(
    ForegroundColorSpan(Color.BLUE),
    9, 31, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
textView.text = spannable
textView.movementMethod = LinkMovementMethod.getInstance()

LinkMovementMethod کے بغیر، URLSpan پر کلکس پروسیس نہیں ہوں گے۔ MovementMethod ٹچ ایونٹس کو روکنے اور ٹچ پوزیشن پر ClickableSpan تلاش کرنے کے لیے ذمہ دار ہے۔ رنگ کا اسپین لنک کو صارف کو دکھائی دیتا ہے۔

کوڈ میں SpannableString کا استعمال کیسے کریں

SpannableString کے ساتھ کام ایک ٹیکسٹ سٹرنگ سے انسٹنس بنا کر اور setSpan() طریقہ کے ذریعے ترتیب وار اسپین لاگو کرکے شروع ہوتا ہے۔ طریقہ چار پیرامیٹر لیتا ہے: اسپین آبجیکٹ، شروع کی پوزیشن، اختتامی پوزیشن اور فلیگ۔ تمام اسپین سیٹ کرنے کے بعد، آبجیکٹ setText() کے ذریعے TextView کو پاس کیا جاتا ہے۔

ٹیکسٹ رنگ اور سائز

آئیے ایک سٹرنگ بنائیں جہاں پہلا لفظ سرخ اور بڑا ہو۔ اس کے لیے، ہم رنگ کے لیے ForegroundColorSpan اور پیمانے کے لیے RelativeSizeSpan استعمال کرتے ہیں۔ دونوں اسپین آزادانہ طور پر ایک ہی رینج پر لاگو ہوتے ہیں — setSpan کال کی ترتیب اہم نہیں ہے۔

kotlin
val text = "Header: remaining text"
val spannable = SpannableString(text)
val colorSpan = ForegroundColorSpan(Color.RED)
val sizeSpan = RelativeSizeSpan(1.5f)
spannable.setSpan(colorSpan, 0, 9, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
spannable.setSpan(sizeSpan, 0, 9, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
textView.text = spannable

پوزیشن 0 سے 9 تک کے حروف ایک ساتھ دونوں اسٹائل حاصل کرتے ہیں۔ TextView رینڈرنگ کے دوران خود بخود تمام اسپین لاگو کرتا ہے — کسی اضافی کال کی ضرورت نہیں۔ 1.5f کے ضریب کے ساتھ RelativeSizeSpan بنیاد کے مقابلے میں فونٹ سائز 50% بڑھاتا ہے۔

HTML ٹیگ کے ساتھ امتزاج

Html.fromHtml() HTML سٹرنگ سے Spanned آبجیکٹ بناتا ہے، لیکن معاون ٹیگ کا سیٹ محدود ہے۔ SpannableString HTML کی حدود کے بغیر ہر خصوصیت پر مکمل کنٹرول دیتی ہے۔ اگر آپ کو HTML کو اسپین میں تبدیل کرنے اور پھر کسٹم اسٹائل شامل کرنے کی ضرورت ہے، تو آپ Html.fromHtml() کو بنیاد کے طور پر استعمال کر سکتے ہیں اور پھر setSpan() کے ذریعے اسپین کے ساتھ تکمیل کر سکتے ہیں۔

kotlin
val htmlText = Html.fromHtml(
    "<b>Important:</b> check the data",
    Html.FROM_HTML_MODE_LEGACY
)
val spannable = SpannableString(htmlText)
spannable.setSpan(
    ForegroundColorSpan(Color.RED),
    0, 6, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
textView.text = spannable

نتیجہ — «اہم:» متن (HTML سے) بولڈ اور (اسپین سے) سرخ ہوگا۔ یہ طریقہ سرور کے مواد کے ساتھ کام کرتے وقت آسان ہے جہاں فارمیٹنگ کا کچھ حصہ HTML میں مخصوص ہوتا ہے اور کچھ حصہ کلائنٹ کی طرف پروگرامی طور پر شامل کیا جاتا ہے۔

متعدد اسپین کو یکجا کرنا

SpannableString ایک ہی یا اوورلیپنگ رینج پر لامحدود تعداد میں اسپین لاگو کرنے کی اجازت دیتی ہے۔ اسپین کو یکجا کرنا HTML مارک اپ پر ایک اہم فائدہ ہے، جہاں نیسٹڈ ٹیگ تنازعہ کر سکتے ہیں۔ اسپین آزاد ہیں اور رینڈرنگ کے دوران ترتیب وار لاگو ہوتے ہیں۔

مثال کے طور پر، آپ ٹیکسٹ سیگمنٹ کو ایک ساتھ بولڈ، سرخ اور کلک کے قابل بنا سکتے ہیں۔ ایسا کرنے کے لیے، تین اسپین بنائیں — StyleSpan، ForegroundColorSpan اور ClickableSpan — اور ہر ایک کو ایک ہی رینج پر لاگو کریں۔ اطلاق کی ترتیب نتیجہ کو متاثر نہیں کرتی، کیونکہ ہر اسپین اپنی ٹیکسٹ خصوصیت کے لیے ذمہ دار ہے۔

مختلف اقسام کے اسپین کا اوورلیپ

اگر مختلف اقسام کے اسپین جزوی طور پر اوورلیپ ہوتے ہیں، تو ہر ایک اپنی حدود میں آزادانہ طور پر کام کرتا ہے۔ رینج 0–10 پر ForegroundColorSpan اور رینج 5–15 پر StyleSpan(BOLD) سیگمنٹ 5–10 پر بولڈ سرخ ٹیکسٹ اور 10–15 پر صرف بولڈ دے گا۔ کوئی تنازعہ پیدا نہیں ہوتا کیونکہ ہر اسپین رینڈرنگ کے دوران اپنی خصوصیت کو تبدیل کرتا ہے۔

اسپین کی فہرست حاصل کرنا

getSpans(int start, int end, Class type) طریقہ مخصوص رینج کے اندر اسپین کی ایک ارے لوٹاتا ہے۔ یہ چیک کرنے کے لیے مفید ہے کہ کون سے اسٹائل پہلے سے لاگو ہیں، یا مخصوص اسپین کو ہٹانے کے لیے۔ nextSpanTransition() کے ساتھ، آپ اسپین تبدیلی کی حدود پر اعادہ کر سکتے ہیں — یہ کسٹم TextView نفاذ کی بنیاد ہے جسے یہ جاننے کی ضرورت ہوتی ہے کہ اسٹائل کہاں تبدیل ہوتا ہے۔

ٹیکسٹ تعمیر کے لیے SpannableStringBuilder

SpannableStringBuilder ٹکڑوں کو داخل کرنے، تبدیل کرنے اور حذف کرنے کی صلاحیت کے ساتھ اسٹائل شدہ ٹیکسٹ کی مرحلہ وار تعمیر کے لیے ایک کلاس ہے۔ SpannableString کے برعکس، جو ایک تیار سٹرنگ سے بنائی جاتی ہے اور ناقابل تغیر ہے، Builder ٹیکسٹ حصوں کو ترتیب وار شامل کرنے اور چلتے پھرتے اسٹائل تفویض کرنے کی اجازت دیتا ہے۔ یہ مرکب پیغامات کے لیے مثالی ہے: لاگز، چیٹس، متحرک لیبل والی خبروں کی سرخیاں۔

Builder Spannable اور Editable انٹرفیس لاگو کرتا ہے، جو اسے EditText کے ساتھ مطابقت رکھتا ہے۔ صارف ٹیکسٹ میں ترمیم کر سکتا ہے، اور اسٹائل محفوظ رہتے ہیں اور نئے حروف داخل کرنے پر صحیح طور پر منتقل ہوتے ہیں۔ SpannableString، ناقابل تغیر ہونے کی وجہ سے، قابل تدوین فیلڈز کے لیے موزوں نہیں ہے۔

طریقہ زنجیر

append() طریقہ Builder کو ہی لوٹاتا ہے، جس سے طریقہ زنجیر بنانا ممکن ہوتا ہے۔ ٹیکسٹ شامل کرنے کے بعد، setSpan() کے ذریعے اسپین لاگو کیے جاتے ہیں۔ پوزیشنیں موجودہ Builder کی لمبائی کے نسبت مخصوص کی جاتی ہیں۔ زیادہ درست مواد کے کنٹرول کے لیے Insert() اور replace() بھی دستیاب ہیں۔

kotlin
val builder = SpannableStringBuilder()
    .append("New ")
    .append("comment")
val blue = ForegroundColorSpan(Color.BLUE)
val gray = ForegroundColorSpan(Color.GRAY)
builder.setSpan(blue, 0, 6, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
builder.setSpan(gray, 6, 17, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
textView.text = builder

«نیا » متن نیلے رنگ میں اور «تبصرہ» سرمئی رنگ میں ہے۔ ان کے درمیان اضافی حروف داخل کرنے پر، EXCLUSIVE فلیگ کی بدولت اسپین نئے ٹیکسٹ کو متاثر نہیں کرے گا۔ Builder تبدیلی پر خود بخود اندرونی اشاریوں کو ایڈجسٹ کرتا ہے۔

اسپین کی کارکردگی اور اصلاح

بڑی تعداد میں اسپین کا استعمال TextView کی رینڈرنگ کارکردگی کو متاثر کرتا ہے۔ ہر اسپین ہر دوبارہ ڈرا پر updateDrawState() یا updateMeasureState() طریقہ کال کرتا ہے۔ درمیانی رینج کے آلات پر آرام دہ کارکردگی کے لیے فی TextView 50–100 اسپین تک محدود رکھنے کی سفارش کی جاتی ہے۔ ٹیکسٹ کا سائز تبدیل کرنے والے اسپین (RelativeSizeSpan, AbsoluteSizeSpan) کو ہر تبدیلی پر لے آؤٹ دوبارہ گنتی کی ضرورت ہوتی ہے، جو صرف رنگ یا انڈر لائن اسپین سے نمایاں طور پر مہنگا ہے۔

TextAppearanceSpan

TextAppearanceSpan ایک setSpan() کال کے ساتھ android:textAppearance XML وسائل سے اسٹائل کا مکمل سیٹ لاگو کرنے کی اجازت دیتا ہے۔ تین علیحدہ اسپین (رنگ، سائز، فونٹ) کے بجائے، اسٹائل حوالہ کے ساتھ ایک واحد TextAppearanceSpan استعمال کیا جاتا ہے۔ اس سے آبجیکٹ کی تعداد کم ہوتی ہے اور دیکھ بھال آسان ہوتی ہے — وسائل میں اسٹائل تبدیل کرنا خود بخود اس اسپین کو استعمال کرنے والے تمام ٹیکسٹس پر لاگو ہوتا ہے۔

آبجیکٹ دوبارہ استعمال

ہر setSpan() کے لیے ایک نیا اسپین انسٹنس بنانا کوڑا کرکٹ جمع کرنے والے پر اضافی بوجھ ڈالتا ہے۔ اگر انہیں بار بار استعمال کیا جاتا ہے تو مستقل اسپین آبجیکٹ بنانا بہتر ہے۔ مثال کے طور پر، ForegroundColorSpan(Color.RED) کو companion آبجیکٹ میں محفوظ کیا جا سکتا ہے اور دوبارہ استعمال کیا جا سکتا ہے۔ تاہم، حالت والے اسپین (مختلف ہینڈلر والے ClickableSpan) ہر کیس کے لیے انفرادی طور پر بنائے جانے چاہئیں۔

پیمائش اور پروفائلنگ

اسپین کی کارکردگی کے مسائل کی تشخیص کے لیے، Android Studio میں Layout Inspector اور GPU پروفائلر استعمال کریں۔ اگر بہت سے اسپین والا TextView اسکرول کرتے وقت نمایاں طور پر سست ہو جاتا ہے، تو TextAppearanceSpan کے ذریعے کچھ اسپین کو جامد اسٹائل سے تبدیل کرنے یا کسٹم UpdateAppearance نفاذ میں خصوصیات کو ملا کر اسپین کی تعداد کم کرنے پر غور کریں۔

اکثر پوچھے گئے سوالات

SpannableString عام String سے کیسے مختلف ہے؟

String اسٹائل سپورٹ کے بغیر حروف کا ایک ناقابل تغیر سلسلہ ہے۔ SpannableString ایک ہی حروف کو ذخیرہ کرتی ہے لیکن اضافی طور پر فارمیٹنگ کی معلومات کے ساتھ Span آبجیکٹ کی ایک ارے رکھتی ہے۔ TextView پاس کردہ CharSequence کی قسم کا تعین کرتا ہے اور رینڈرنگ کے دوران متعلقہ رینجز پر اسپین لاگو کرتا ہے۔ String کسی بھی اسٹائل کی خصوصیت کو نظر انداز کرتی ہے اور سادہ ٹیکسٹ کے طور پر دکھائی دیتی ہے۔

SpannableString سے تمام اسپین کیسے ہٹائیں؟

removeSpan(Object span) طریقہ ایک مخصوص اسپین کو ہٹاتا ہے۔ مکمل صفائی کے لیے، getSpans(0, length, Object::class.java) کال کریں، جو تمام اسپین کی ایک ارے لوٹاتا ہے، پھر ہر ایک کو removeSpan کے ذریعے ہٹائیں۔ متبادل طور پر، اسپین کے بغیر ایک نیا SpannableString(text.toString()) بنائیں۔ SpannableStringBuilder میں clear() طریقہ ہے جو ٹیکسٹ اور اسپین دونوں کو ہٹاتا ہے۔

کیا SpannableString EditText میں کام کرتی ہے؟

SpannableString EditText میں کام کرتی ہے، لیکن قابل تدوین ٹیکسٹ کے لیے SpannableStringBuilder کو ترجیح دی جاتی ہے جو Editable لاگو کرتی ہے۔ EditText کو تبدیلیوں کو ٹریک کرنے کے لیے Editable انٹرفیس کی ضرورت ہوتی ہے۔ اگر آپ EditText میں SpannableString پاس کرتے ہیں، تو ٹیکسٹ اسٹائل کے ساتھ دکھائی دے گا، لیکن ترمیم کے دوران Android اسے Editable میں تبدیل کر دے گا، جو کچھ اسپین کو ری سیٹ کر سکتا ہے۔

کیا Compose میں SpannableString استعمال کی جا سکتی ہے؟

Jetpack Compose میں، Android SDK اسپین براہ راست استعمال نہیں ہوتے۔ اس کے بجائے، Compose AnnotatedString فراہم کرتا ہے، جو اسی صلاحیتوں کے ساتھ SpannableString کا اپنا ہم منصب ہے: انفرادی حروف کے اسٹائل کے لیے SpanStyle اور پیراگراف کے لیے ParagraphStyle۔ SpannableString کو AnnotatedString میں تبدیل کرنا اسپین پر اعادہ کے ساتھ buildAnnotatedString کے ذریعے ممکن ہے۔

کسٹم Span کیسے بنائیں؟

ایک کلاس بنائیں جو CharacterStyle کو بڑھائے اور updateDrawState(TextPaint tp) طریقہ کو اوور رائڈ کرے۔ طریقہ کے اندر، TextPaint کی خصوصیات تبدیل کریں: رنگ، اسٹروک چوڑائی، اثرات۔ میٹرک تبدیلیوں کے لیے، UpdateLayout یا MetricAffectingSpan استعمال کریں۔ کسٹم اسپین بلٹ ان اسپین کی طرح setSpan() کے ذریعے لاگو کیے جاتے ہیں۔

خلاصہ

  • SpannableString — حروف کی رینج بائنڈنگ کے ساتھ Span آبجیکٹ کے ذریعے ٹیکسٹ اسٹائل کرنے کے لیے Android کلاس
  • CharacterStyle انفرادی حروف کو متاثر کرتا ہے، ParagraphStyle مکمل پیراگراف کو متاثر کرتا ہے
  • اہم اسپین: ForegroundColorSpan, StyleSpan, RelativeSizeSpan, URLSpan, ClickableSpan
  • SpannableStringBuilder — Editable کے ساتھ متحرک ٹیکسٹ تعمیر کے لیے قابل تغیر ورژن
  • اسپین کو یکجا کرنا محفوظ ہے — ہر اسپین اپنی خصوصیت کو آزادانہ طور پر تبدیل کرتا ہے
  • Span فلیگ حدود پر ٹیکسٹ داخل کرتے وقت اسپین کے رویے کو کنٹرول کرتے ہیں
  • اصلاح: اسٹائل گروپس کے لیے TextAppearanceSpan استعمال کریں اور اسپین کو 100 تک محدود کریں

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں