Zamonaviy mobil ilovalarning interfeyslarini yaratishda matn bilan ishlash asosiy vazifadir. Shrift tanlashdan tortib belgilar orasidagi masofani sozlashgacha — har bir jihat mahsulotning idrok qilinishiga ta'sir qiladi. Apple NSAttributedString hujjatlariga ko'ra, to'g'ri matn formatlash bevosita o'qish qulayligi va interfeysning foydalanish imkoniyati bilan bog'liq.
Asosiy Fikrlar
NSAttributedString formatlangan matn bilan ishlash uchun asosiy iOS sinfidir. U alohida belgilar yoki diapazonlarga atributlarni qo'llash imkonini beradi: UIFont orqali shrift, UIColor orqali rang, kern orqali belgilar oralig'i va NSMutableParagraphStyle orqali qator oralig'i. Mobil ilovalarda NSAttributedString hamma joyda qo'llaniladi — UILabel dan tahrirlashni qo'llab-quvvatlaydigan murakkab UITextView gacha.
UIFont iOS-da shriftlar bilan ishlash uchun asosiy sinfdir. U tizim shriftlarini, maxsus shriftlarni va Dynamic Type-ni qo'llab-quvvatlaydi. UIFont(name:size()) shriftni nomi bo'yicha yuklaydi, UIFont.systemFont(ofSize:weight()) tizim shriftini yuklaydi. UIFontDescriptor mavjud shriftni o'zgartirish imkonini beradi: hajmini, og'irligini o'zgartirish yoki transformatsiya matritsasini qo'shish. Maxsus shriftlar uchun .ttf fayli loyihaga qo'shiladi va Info.plist da Fonts provided by application kaliti ostida ro'yxatdan o'tkaziladi.
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 paragraf ko'rinishini sozlash uchun ParagraphStyle ning o'zgartiriladigan versiyasidir. U tekislash (alignment), qator oralig'i (lineSpacing), chekinishlar (headIndent, tailIndent) va kesish rejimini (lineBreakMode) boshqaradi. ParagraphStyle mobil qurilmalarda uzoq matnlarning o'qish qulayligi uchun juda muhimdir: to'g'ri lineSpacing qatorlarning birlashishini oldini oladi, lineBreakMode esa so'zlarning kesilishini oldini oladi. paragraphSpacing sozlamasi paragraflar orasidagi bo'shliqni belgilaydi.
SpannableString Android-da matn formatlash uchun asosiy vositadir. U Span obyektlari mexanizmi orqali ishlaydi, har biri bir jihat uchun javobgardir: StyleSpan qalin yoki kursiv uchun, ForegroundColorSpan rang uchun, URLSpan havolalar uchun, UnderlineSpan tagiga chizish uchun. SpannableStringBuilder NSMutableAttributedString ning analogidir va bir nechta bo'laklardan matn qurish imkonini beradi. Mobil ilovalarda formatlangan matn bilan moslashuvchan interfeyslar yaratish uchun SpannableString ni tushunish zarur.
Typeface Android-da shriftlar bilan ishlash uchun sinfdir. U tizim shriftlari Roboto va Noto ni, shuningdek maxsus shriftlarni qo'llab-quvvatlaydi. Typeface.createFromResource() res/font/ dan shrift yuklaydi, Typeface.createFromAsset() esa assets jildidan yuklaydi. Android 8.0+ XML da shrift oilalarini qo'llab-quvvatlaydi, bir nechta shrift fayllarini bitta resursga birlashtiradi. Android-da mobil ilovalarda matn uchun maxsus shrift android:fontFamily atributi orqali yoki dasturiy ravishda setTypeface() yordamida o'rnatiladi.
TextMeasurer (API 29+) View ga bog'lanmagan holda matnni o'lchash uchun zamonaviy vositadir. U renderlashdan oldin kenglik, balandlik va belgi pozitsiyalarini hisoblaydi. Eski API larda bir qatorli matn uchun Paint.measureText() yoki ko'p qatorli matn uchun StaticLayout ishlatiladi. TextMeasurer, ayniqsa, Canvas.drawText() orqali matn chiziladigan maxsus View larda foydalidir. To'g'ri o'lchash interfeysda belgilarning kesilishini oldini oladi.
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
Mobil ilovalarda tipografiya shriftlar, belgilar oralig'i va qator oralig'ining keng qamrovli sozlamasidir. Mobil rivojlanishda to'g'ri tipografiya bevosita matnning o'qish qulayligi va interfeysning vizual idrokiga ta'sir qiladi. Keling, ikkala platformada mavjud bo'lgan asosiy parametrlarni ko'rib chiqaylik.
Kernig ma'lum belgilar juftliklari (AV, To, Wa) orasidagi masofani sozlashdir. Treking butun matn yoki uning bir qismi uchun bir xil belgilar oralig'idir. iOS da kernig NSKernAttributeName orqali, Android da esa TextView ning letterSpacing xususiyati orqali o'rnatiladi. Salbiy qiymatlar belgilarni yaqinlashtiradi, ijobiy qiymatlar esa ularni uzoqlashtiradi. Mobil rivojlanishda tipografiya ushbu parametrlarni ehtiyotkorlik bilan sozlashni talab qiladi: katta sarlavhalar uchun belgilar oralig'i odatda oshiriladi, asosiy matn uchun standart qoladi.
| Parametr | iOS | Android |
|---|---|---|
| Stilizatsiyalangan Satr | NSAttributedString | SpannableString |
| Shrift | UIFont / CTFont | Typeface |
| Belgilar Oralig'i | NSKernAttributeName | letterSpacing |
| Qator Oralig'i | lineSpacing | lineSpacingExtra |
| Ligaturalar | NSLigatureAttributeName | OpenType xususiyatlari |
| Ellipsis | lineBreakMode .byTruncatingTail | android:ellipsize |
Ligaturalar ikki yoki undan ortiq belgilar birikmasini (fi, fl, ffi) almashtiradigan maxsus glifladir. iOS da ligaturalar NSLigatureAttributeName orqali boshqariladi: 0 — o'chirilgan, 1 — standart, 2 — barcha mavjud. Android da ligaturalar OpenType xususiyatlari orqali shrift darajasida boshqariladi. Ligaturalarni yoqish matnning ko'rinishini yaxshilaydi, ayniqsa serif shriftlarida. Mobil rivojlanishda tipografiya ligaturalardan asosan sarlavhalar va logotiplar uchun foydalanadi.
Maxsus shriftlar ilova uchun noyob vizual uslub yaratishning asosiy vositalaridan biridir. Ular brendni ta'kidlash va foydalanuvchi tajribasini yaxshilashga yordam beradi. Mobil ilovalarda maxsus shriftlar sarlavhalar, logotiplar, urg'u elementlari va korporativ identifikatsiya uchun ishlatiladi.
O'zgaruvchan Shriftlar bir fayl bir nechta uslublarni o'z ichiga olgan zamonaviy shrift texnologiyasidir: yupqadan o'ta qalingacha, tordan kenggacha. Bu bir nechta shrift fayllarini bitta fayl bilan almashtirish orqali ilova hajmini kamaytiradi. iOS da O'zgaruvchan Shriftlar weight parametri bilan UIFont orqali qo'llab-quvvatlanadi. Android da — o'zgaruvchanlik o'qlarini (wght, wdth, slnt) ko'rsatadigan Typeface.Builder orqali. O'zgaruvchan Shriftlardan foydalanish mobil ilovalarda tipografiyani soddalashtiradi: dasturchi har bir uslub uchun alohida fayllarni yuklashi shart emas.
let customFont = UIFont(name: "CustomFont-Regular", size: 16)
let scaledFont = UIFontMetrics.default
.scaledFont(for: customFont)
label.font = scaledFont
label.adjustsFontForContentSizeCategory(true)
iOS da NSTextAttachment NSAttributedString ichiga UIImage joylashtirish imkonini beradi — tasvir tayanch chizig'i bo'ylab tekislanadi va matn bilan birga harakatlanadi. Android da analog SpannableString ichidagi ImageSpan dir. Ikkala yondashuv ham emoji bilan chat, ikonkalar bilan yangiliklar lentalari va maxsus belgilash qutilari bilan shakllar uchun foydalidir. Matn va grafika uyg'un ko'rinishi uchun tasvirni shrift balandligiga mos ravishda to'g'ri masshtablash muhimdir.
Asosiy formatlashdan tashqari, mobil ilovalarda matn qo'shimcha vizual effektlarni qo'llab-quvvatlaydi: soyalar, konturlar, chizilgan va tagiga chizilgan. Ushbu vositalar tipografiya imkoniyatlarini kengaytiradi, ammo o'qish qulayligini saqlash uchun ehtiyotkorlik bilan qo'llashni talab qiladi.
iOS da matn soyasi offset, blurRadius va color bilan NSShadow orqali o'rnatiladi. Kontur — NSStrokeWidthAttributeName orqali: salbiy qiymatlar kontur bilan to'ldirishni yaratadi, ijobiy qiymatlar faqat konturni yaratadi. Chizilgan — NSUnderlineStyle (.single, .thick, .double). Android da TextView soyasi android:shadowRadius, android:shadowDx, android:shadowDy orqali sozlanadi. SpannableString StrikethroughSpan va UnderlineSpan ni qo'llab-quvvatlaydi. Android da matn konturi OutlineSpan yoki maxsus shrift orqali amalga oshiriladi.
Ellipsis konteyner to'lib ketganda matnni uch nuqta bilan kesishdir. iOS da lineBreakMode .byTruncatingTail va numberOfLines orqali sozlanadi. Android da — android:ellipsize="end" va android:maxLines orqali. Marquee Android da android:ellipsize="marquee" orqali mavjud bo'lgan aylanma matn animatsiyasidir. iOS da o'rnatilgan analog yo'q — MarqueeLabel kutubxonasi ishlatiladi. Tarkibning kesilishini oldini olish uchun mobil ilovalardagi barcha bir qatorli matnlar uchun ellipsis majburiydir.
Dynamic Type foydalanuvchining Foydalanish imkoniyati sozlamalariga asoslanib shrift hajmini sozlaydigan iOS da moslashuvchan matn tizimidir. Maxsus shriftlarni masshtablash uchun UIFontMetrics dan foydalaning. Dynamic Type foydalanish imkoniyatiga mos ilovalar uchun majburiydir. Android da analog sp birliklari va scaledPixels dir, ular tizim matn hajmi sozlamalariga muvofiq masshtablanadi.
Ko'p So'raladigan Savollar
NSAttributedString belgi va diapazon darajasida shrift, rang va uslub atributlari bilan formatlangan matn yaratish uchun iOS sinfidir.
SpannableString Span obyektlari (ForegroundColorSpan, StyleSpan, URLSpan, UnderlineSpan) orqali matn belgilash uchun Android sinfidir.
.ttf faylini loyihaga qo'shing, uni Info.plist da Fonts provided by application kaliti ostida belgilang, so'ngra UIFont(name:) dan foydalaning.
.ttf faylini res/font/ ga joylashtiring, XML shrift oilasini yarating va android:fontFamily belgilang yoki Typeface.createFromAsset() dan foydalaning.
Kernig belgi juftliklari orasidagi bo'shliqdir. Ligaturalar harf birikmalari uchun maxsus glifladir. Ular NSKernAttributeName va NSLigatureAttributeName orqali boshqariladi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.