টেক্সট নিয়ে কাজ করা আধুনিক মোবাইল অ্যাপ্লিকেশনের ইন্টারফেস তৈরি করার সময় একটি মূল কাজ। ফন্ট নির্বাচন থেকে অক্ষরের মধ্যে ব্যবধান সামঞ্জস্য করা পর্যন্ত — প্রতিটি দিক পণ্যের ধারণাকে প্রভাবিত করে। 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() assets ফোল্ডার থেকে লোড করে। 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-এ — Typeface.Builder এর মাধ্যমে পরিবর্তনশীলতা অক্ষ wght, wdth, slnt নির্দিষ্ট করে। ভেরিয়েবল ফন্ট ব্যবহার মোবাইল অ্যাপে টাইপোগ্রাফি সহজ করে: ডেভেলপারকে প্রতিটি শৈলীর জন্য পৃথক ফাইল লোড করার প্রয়োজন হয় না।
let customFont = UIFont(name: "CustomFont-Regular", size: 16)
let scaledFont = UIFontMetrics.default
.scaledFont(for: customFont)
label.font = scaledFont
label.adjustsFontForContentSizeCategory(true)
NSTextAttachment iOS-এ NSAttributedString-এর ভিতরে UIImage এম্বেড করার অনুমতি দেয় — চিত্রটি বেসলাইনের সাথে সারিবদ্ধ হয় এবং টেক্সটের সাথে চলে। Android-এ, সমতুল্য হল SpannableString-এর ভিতরে ImageSpan। উভয় পদ্ধতিই ইমোজি সহ চ্যাট, আইকন সহ নিউজ ফিড এবং কাস্টম চেকবক্স সহ ফর্মের জন্য উপযোগী। চিত্রটি ফন্টের উচ্চতার সাথে মেলানোর জন্য সঠিকভাবে স্কেল করা গুরুত্বপূর্ণ যাতে টেক্সট এবং গ্রাফিক্স সামঞ্জস্যপূর্ণ দেখায়।
মৌলিক ফর্ম্যাটিং ছাড়াও, মোবাইল অ্যাপে টেক্সট অতিরিক্ত ভিজ্যুয়াল ইফেক্ট সমর্থন করে: ছায়া, আউটলাইন, স্ট্রাইকথ্রু এবং আন্ডারলাইন। এই টুলগুলি টাইপোগ্রাফির সম্ভাবনাকে প্রসারিত করে কিন্তু পাঠযোগ্যতা বজায় রাখতে সতর্কতার সাথে প্রয়োগ প্রয়োজন।
টেক্সট ছায়া iOS-এ NSShadow এর মাধ্যমে offset, blurRadius এবং color সহ সেট করা হয়। আউটলাইন — 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 অবজেক্টের মাধ্যমে টেক্সট মার্কআপের জন্য একটি Android ক্লাস: ForegroundColorSpan, StyleSpan, URLSpan, UnderlineSpan।
.ttf ফাইল প্রজেক্টে যোগ করুন, Info.plist-এ Fonts provided by application কী-এর অধীনে এটি নির্দিষ্ট করুন, তারপর UIFont(name:) ব্যবহার করুন।
.ttf ফাইল res/font/ এ রাখুন, একটি XML ফন্ট পরিবার তৈরি করুন, এবং android:fontFamily নির্দিষ্ট করুন বা Typeface.createFromAsset() ব্যবহার করুন।
কার্নিং অক্ষর জোড়ার মধ্যে স্থান। লিগাচার অক্ষর সংমিশ্রণের জন্য বিশেষ গ্লিফ। এগুলি NSKernAttributeName এবং NSLigatureAttributeName এর মাধ্যমে নিয়ন্ত্রিত হয়।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।