جدید موبائل ایپلیکیشنز کے انٹرفیس بناتے وقت متن کے ساتھ کام کرنا ایک اہم کام ہے۔ فونٹ کے انتخاب سے لے کر حروف کے درمیان فاصلہ ایڈجسٹ کرنے تک — ہر پہلو مصنوعات کے ادراک کو متاثر کرتا ہے۔ Apple NSAttributedString دستاویزات کے مطابق، مناسب متن کی فارمیٹنگ براہ راست پڑھنے کی اہلیت اور انٹرفیس کی رسائی سے متعلق ہے۔
اہم نکات
NSAttributedString فارمیٹ شدہ متن کے ساتھ کام کرنے کے لیے بنیادی iOS کلاس ہے۔ یہ انفرادی حروف یا رینجز پر خصوصیات لاگو کرنے کی اجازت دیتی ہے: UIFont کے ذریعے فونٹ، UIColor کے ذریعے رنگ، kern کے ذریعے حرف فاصلہ، اور NSMutableParagraphStyle کے ذریعے لائن فاصلہ۔ موبائل ایپس میں، NSAttributedString ہر جگہ استعمال ہوتی ہے — UILabel سے لے کر ترمیم کی معاونت کے ساتھ پیچیدہ UITextView تک۔
UIFont iOS پر فونٹس کے ساتھ کام کرنے کے لیے مرکزی کلاس ہے۔ یہ سسٹم ٹائپ فیسس، کسٹم فونٹس اور Dynamic Type کو سپورٹ کرتی ہے۔ UIFont(name:size:) نام سے فونٹ لوڈ کرتا ہے، UIFont.systemFont(ofSize:weight:) سسٹم فونٹ لوڈ کرتا ہے۔ UIFontDescriptor موجودہ فونٹ میں ترمیم کرنے کی اجازت دیتا ہے: سائز، وزن تبدیل کرنا یا تبدیلی میٹرکس شامل کرنا۔ کسٹم فونٹس کے لیے، .ttf فائل پروجیکٹ میں شامل کی جاتی ہے اور Info.plist میں Fonts provided by application کلید کے تحت رجسٹر کی جاتی ہے۔
let attributes: [NSAttributedString.Key: Any] = [
.font: UIFont(name: "HelveticaNeue-Bold", size: 18) as Any,
.foregroundColor: UIColor.darkGray as Any,
.kern: 1.5 as Any
]
let attributedString = NSAttributedString(
string: "Форматированный текст",
attributes: attributes
)
label.attributedText = attributedString
NSMutableParagraphStyle پیراگراف ڈسپلے کو کنفیگر کرنے کے لیے ParagraphStyle کا ایک قابل تبدیل ورژن ہے۔ یہ سیدھ (alignment)، لائن فاصلہ (lineSpacing)، انڈینٹ (headIndent، tailIndent) اور کاٹنے کا موڈ (lineBreakMode) کنٹرول کرتا ہے۔ ParagraphStyle موبائل آلات پر لمبے متن کی پڑھنے کی اہلیت کے لیے اہم ہے: مناسب lineSpacing لائنوں کے انضمام کو روکتا ہے، اور lineBreakMode الفاظ کی کٹائی کو روکتا ہے۔ paragraphSpacing سیٹنگ پیراگراف کے درمیان جگہ کی وضاحت کرتی ہے۔
SpannableString Android پر متن کی فارمیٹنگ کے لیے مرکزی آلہ ہے۔ یہ Span آبجیکٹ کے میکانزم کے ذریعے کام کرتا ہے، ہر ایک ایک پہلو کے لیے ذمہ دار ہے: StyleSpan بولڈ یا اٹالک کے لیے، ForegroundColorSpan رنگ کے لیے، URLSpan لنکس کے لیے، UnderlineSpan انڈر لائن کے لیے۔ SpannableStringBuilder NSMutableAttributedString کے مساوی ہے، جو متعدد ٹکڑوں سے متن بنانے کی اجازت دیتا ہے۔ موبائل ایپس میں فارمیٹ شدہ متن کے ساتھ لچکدار انٹرفیس بنانے کے لیے SpannableString کو سمجھنا ضروری ہے۔
Typeface Android پر فونٹس کے ساتھ کام کرنے کے لیے کلاس ہے۔ یہ سسٹم ٹائپ فیسس Roboto اور Noto کے ساتھ ساتھ کسٹم فونٹس کو بھی سپورٹ کرتی ہے۔ Typeface.createFromResource() res/font/ سے فونٹ لوڈ کرتا ہے، Typeface.createFromAsset() اثاثہ جات فولڈر سے لوڈ کرتا ہے۔ Android 8.0+ XML میں فونٹ فیملیز کو سپورٹ کرتا ہے، متعدد فونٹ فائلوں کو ایک وسائل میں یکجا کرتا ہے۔ Android پر موبائل ایپس میں متن کے لیے کسٹم فونٹ android:fontFamily وصف کے ذریعے یا پروگرام کے ذریعے setTypeface() استعمال کرکے سیٹ کیا جاتا ہے۔
TextMeasurer (API 29+) View سے منسلک ہوئے بغیر متن کی پیمائش کرنے کا ایک جدید آلہ ہے۔ یہ رینڈرنگ سے پہلے چوڑائی، اونچائی اور حرف کی پوزیشنوں کا حساب لگاتا ہے۔ پرانی API پر، ایک لائن والے متن کے لیے Paint.measureText() یا کثیر لائن والے متن کے لیے StaticLayout استعمال کیا جاتا ہے۔ TextMeasurer خاص طور پر کسٹم Views میں مفید ہے جہاں Canvas.drawText() کے ذریعے متن کھینچا جاتا ہے۔ درست پیمائش انٹرفیس میں حروف کی کٹائی کو روکتی ہے۔
val spannable = SpannableString("Жирный текст с цветом")
spannable.setSpan(
StyleSpan(Typeface.BOLD),
0, 6,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
spannable.setSpan(
ForegroundColorSpan(Color.RED),
14, 19,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
textView.text = spannable
موبائل ایپس میں نوع نگاری فونٹس، حرف فاصلہ اور لائن فاصلہ کی ایک جامع ترتیب ہے۔ موبائل ڈیولپمنٹ میں مناسب نوع نگاری براہ راست متن کی پڑھنے کی اہلیت اور انٹرفیس کے بصری ادراک کو متاثر کرتی ہے۔ آئیے دونوں پلیٹ فارمز پر دستیاب اہم پیرامیٹرز دیکھتے ہیں۔
کرننگ مخصوص حرف جوڑوں (AV، To، Wa) کے درمیان جگہ کی ایڈجسٹمنٹ ہے۔ ٹریکنگ پورے متن یا اس کے ایک حصے کے لیے یکساں حرف فاصلہ ہے۔ iOS پر، کرننگ NSKernAttributeName کے ذریعے سیٹ کی جاتی ہے، Android پر — TextView کی letterSpacing پراپرٹی کے ذریعے۔ منفی اقدار حروف کو قریب لاتی ہیں، مثبت اقدار انہیں پھیلاتی ہیں۔ موبائل ڈیولپمنٹ میں نوع نگاری کے لیے ان پیرامیٹرز کی احتیاط سے ترتیب کی ضرورت ہوتی ہے: بڑی سرخیوں کے لیے حرف فاصلہ عام طور پر بڑھایا جاتا ہے، باڈی ٹیکسٹ کے لیے یہ معیاری رہتا ہے۔
| پیرامیٹر | iOS | Android |
|---|---|---|
| اسٹائلائزڈ سٹرنگ | NSAttributedString | SpannableString |
| فونٹ | UIFont / CTFont | Typeface |
| حرف فاصلہ | NSKernAttributeName | letterSpacing |
| لائن فاصلہ | lineSpacing | lineSpacingExtra |
| لیگیچر | NSLigatureAttributeName | OpenType خصوصیات |
| بیضوی نشان | lineBreakMode .byTruncatingTail | android:ellipsize |
لیگیچر خاص گلائف ہیں جو دو یا زیادہ حروف (fi، fl، ffi) کے مجموعے کو بدل دیتے ہیں۔ iOS پر، لیگیچر NSLigatureAttributeName کے ذریعے کنٹرول کیے جاتے ہیں: 0 — غیر فعال، 1 — معیاری، 2 — تمام دستیاب۔ Android پر، لیگیچر OpenType خصوصیات کے ذریعے فونٹ کی سطح پر کنٹرول کیے جاتے ہیں۔ لیگیچر کو فعال کرنے سے متن کی ظاہری شکل بہتر ہوتی ہے، خاص طور پر سیریف ٹائپ فیسس میں۔ موبائل ڈیولپمنٹ میں نوع نگاری بنیادی طور پر سرخیوں اور لوگو کے لیے لیگیچر استعمال کرتی ہے۔
کسٹم فونٹس ایپ کے لیے منفرد بصری اسٹائل بنانے کے اہم اوزاروں میں سے ایک ہیں۔ وہ برانڈ کو نمایاں کرنے اور صارف کے تجربے کو بہتر بنانے میں مدد کرتے ہیں۔ موبائل ایپس میں، کسٹم فونٹس سرخیوں، لوگو، زور دینے والے عناصر اور کارپوریٹ شناخت کے لیے استعمال ہوتے ہیں۔
متغیر فونٹس ایک جدید فونٹ ٹیکنالوجی ہے جہاں ایک فائل میں متعدد اسٹائل شامل ہوتے ہیں: پتلے سے انتہائی بولڈ تک، تنگ سے چوڑے تک۔ یہ کئی فونٹ فائلوں کو ایک سے بدل کر ایپ کا سائز کم کرتا ہے۔ iOS پر، متغیر فونٹس weight پیرامیٹر کے ساتھ UIFont کے ذریعے سپورٹ کیے جاتے ہیں۔ Android پر — تبدیلی کے محور wght، wdth، slnt کی وضاحت کرنے والے Typeface.Builder کے ذریعے۔ متغیر فونٹس کا استعمال موبائل ایپس میں نوع نگاری کو آسان بناتا ہے: ڈیولپر کو ہر اسٹائل کے لیے علیحدہ فائلیں لوڈ کرنے کی ضرورت نہیں ہے۔
let customFont = UIFont(name: "CustomFont-Regular", size: 16)
let scaledFont = UIFontMetrics.default
.scaledFont(for: customFont)
label.font = scaledFont
label.adjustsFontForContentSizeCategory(true)
iOS پر NSTextAttachment NSAttributedString کے اندر UIImage ایمبیڈ کرنے کی اجازت دیتا ہے — تصویر بیس لائن کے ساتھ سیدھ میں آتی ہے اور متن کے ساتھ چلتی ہے۔ Android پر، مساوی SpannableString کے اندر ImageSpan ہے۔ دونوں طریقے ایموجیز کے ساتھ چیٹ، آئیکنز کے ساتھ نیوز فیڈز اور کسٹم چیک باکس والے فارمز کے لیے مفید ہیں۔ تصویر کو فونٹ کی اونچائی سے ملانے کے لیے مناسب طریقے سے اسکیل کرنا ضروری ہے تاکہ متن اور گرافکس ہم آہنگ نظر آئیں۔
بنیادی فارمیٹنگ کے علاوہ، موبائل ایپس میں متن اضافی بصری اثرات کو سپورٹ کرتا ہے: سائے، آؤٹ لائن، اسٹرائک تھرو اور انڈر لائن۔ یہ اوزار نوع نگاری کے امکانات کو بڑھاتے ہیں لیکن پڑھنے کی اہلیت برقرار رکھنے کے لیے احتیاط سے استعمال کی ضرورت ہوتی ہے۔
iOS پر متن کا سایہ offset، blurRadius اور color کے ساتھ NSShadow کے ذریعے سیٹ کیا جاتا ہے۔ آؤٹ لائن — NSStrokeWidthAttributeName کے ذریعے: منفی اقدار آؤٹ لائن کے ساتھ بھرائی بناتی ہیں، مثبت اقدار صرف خاکہ بناتی ہیں۔ اسٹرائک تھرو — NSUnderlineStyle (.single، .thick، .double)۔ Android پر، TextView کا سایہ android:shadowRadius، android:shadowDx، android:shadowDy کے ذریعے کنفیگر کیا جاتا ہے۔ SpannableString StrikethroughSpan اور UnderlineSpan کو سپورٹ کرتی ہے۔ Android پر متن کا آؤٹ لائن OutlineSpan یا کسٹم فونٹ کے ذریعے لاگو کیا جاتا ہے۔
بیضوی نشان کنٹینر کے بہاو¿ پر بیضوی نشان کے ساتھ متن کی کٹائی ہے۔ iOS پر، یہ lineBreakMode .byTruncatingTail اور numberOfLines کے ذریعے کنفیگر کیا جاتا ہے۔ Android پر — android:ellipsize="end" اور android:maxLines کے ذریعے۔ مارکی ایک اسکرولنگ ٹیکسٹ اینیمیشن ہے جو Android پر android:ellipsize="marquee" کے ذریعے دستیاب ہے۔ iOS پر، کوئی بلٹ ان مساوی نہیں ہے — MarqueeLabel لائبریری استعمال کی جاتی ہے۔ مواد کی کٹائی سے بچنے کے لیے موبائل ایپس میں تمام ایک لائن والے متن کے لیے بیضوی نشان لازمی ہے۔
Dynamic Type iOS میں ایک انکولی متن کا نظام ہے جو صارف کی رسائی کی ترتیبات کی بنیاد پر فونٹ کا سائز ایڈجسٹ کرتا ہے۔ کسٹم فونٹس کو اسکیل کرنے کے لیے UIFontMetrics استعمال کریں۔ Dynamic Type رسائی کے مطابق ایپس کے لیے لازمی ہے۔ Android پر، مساوی sp یونٹس اور scaledPixels ہیں، جو سسٹم کے متن کے سائز کی ترتیبات کے مطابق اسکیل ہوتے ہیں۔
اکثر پوچھے گئے سوالات
NSAttributedString ایک iOS کلاس ہے جو حرف اور رینج کی سطح پر فونٹ، رنگ اور اسٹائل کی خصوصیات کے ساتھ فارمیٹ شدہ متن بنانے کے لیے ہے۔
SpannableString Span آبجیکٹ (ForegroundColorSpan، StyleSpan، URLSpan، UnderlineSpan) کے ذریعے متن کو نشان زد کرنے کے لیے ایک Android کلاس ہے۔
.ttf فائل کو پروجیکٹ میں شامل کریں، اسے Info.plist میں Fonts provided by application کلید کے تحت بتائیں، پھر UIFont(name:) استعمال کریں۔
.ttf فائل کو res/font/ میں رکھیں، ایک XML فونٹ فیملی بنائیں، اور android:fontFamily بتائیں یا Typeface.createFromAsset() استعمال کریں۔
کرننگ حرف جوڑوں کے درمیان جگہ ہے۔ لیگیچر حرفوں کے مجموعوں کے لیے خاص گلائف ہیں۔ یہ NSKernAttributeName اور NSLigatureAttributeName کے ذریعے کنٹرول کیے جاتے ہیں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔