![التعيين من الأنماط في Figma إلى المظهر في Compose](https://developer.android.com/static/develop/ui/compose/tooling/relay/images/mapping-styles-to-compose-theme/mappding-from-styles-in-figma.png?authuser=6&hl=ar)
تتيح Figma للمصممين تطبيق نمط على عنصر التصميم. النمط هو مجموعة قابلة لإعادة الاستخدام من الخصائص، مثل الألوان أو أسلوب الخط. نظرًا لأنه يتم تحديدها مركزيًا، يمكن للفريق تحديد وتحديث الخصائص عبر جميع التصميمات عند تحديث عنصر تصميم واحد. يمكنك إعداد Relay لترجمة أنماط Figma إلى مظاهر Jetpack Compose.
يتم تحديد التعيين بين أنماط Figma ومظاهر Compose من خلال ملف تهيئة.
![يعين ملف التكوين أنماط Figma ومظاهر Compose](https://developer.android.com/static/develop/ui/compose/tooling/relay/images/mapping-styles-to-compose-theme/config-file.png?authuser=6&hl=ar)
على سبيل المثال، يستخدم تصميم Figma الموضح أدناه أنماطًا من مجموعة أدوات تصميم Material 3 من Google. في النص أساسي - عنوان كبير، يكون الخط هو M3/title/large ولوّنه M3/sys/light/primary..
![أنماط Material 3 في Figma](https://developer.android.com/static/develop/ui/compose/tooling/relay/images/mapping-styles-to-compose-theme/m3-styles-in-Figma.png?authuser=6&hl=ar)
إذا استوردنا التصميم مع تفعيل ترجمة أنماط M3 Design Kit، فسيتم إنشاء الرمز التالي للنص Primary - العنوان الكبير:
@Composable
fun PrimaryTitleLarge(modifier: Modifier = Modifier) {
Text(
content = "Primary - Title large",
fontSize = MaterialTheme.typography.titleLarge.fontSize,
fontFamily = MaterialTheme.typography.titleLarge.fontFamily,
color = MaterialTheme.colorScheme.primary,
height = MaterialTheme.typography.titleLarge.lineHeight,
letterSpacing = MaterialTheme.typography.titleLarge.letterSpacing,
textAlign = TextAlign.Left,
fontWeight = MaterialTheme.typography.titleLarge.fontWeight,
modifier = modifier
)
}
لاستخدام هذه الميزة، استخدم الأنماط كما تفعل عادةً في Figma. ثم في Android Studio، انتقل إلى ملف > جديد > استيراد حزم واجهة المستخدم...، ثم حدد ترجمة أنماط Figma إلى مظهر Compose.
في هذه المرحلة، يجب عليك اختيار تكوين لترجمة أنماط التصميم الخاص بك:
- إذا كانت مصدرها مباشرة مجموعة أدوات تصميم المواد 3 من Google
لـ Figma (التي لديها التنسيق
M3/body/medium or M3/sys/light/primary
)، فحدد خيار إعدادات مجموعة أدوات تصميم المواد 3. - أما إذا كانت تأتي مباشرةً من مجموعة أدوات تصميم المواد 2 من Google
لـ Figma (التي لديها التنسيق
01. Primary/500 or Subtitle 1
)، فعندئذٍ حدد خيار إعدادات مجموعة أدوات تصميم المواد 2. إذا كان لديك تعريفات الأنماط الخاصة بك، فحدد خيار التهيئة المخصصة واختر الملف الذي يحتوي على التعيينات بين أنماط Figma ومظاهر Compose (الموضحة في هذا القسم).
إذا كانت هناك أنماط في تصميم Figma غير موجودة في التكوين المحدد، يعرض مربع الحوار "Import" (استيراد) تحذيرًا لكل نمط لم يتم تعيينه. بدلاً من ذلك، تتم ترجمة كل نمط غير معيّن إلى قيمته الحرفية. يتم تصغير التحذيرات في البداية، وانقر على بانر التحذيرات لتوسيعها. يحتوي كل تحذير على رابط للطبقة المحددة في ملف Figma التي تسبب التحذير.
![التحذيرات في مربّع حوار الاستيراد](https://developer.android.com/static/develop/ui/compose/tooling/relay/images/mapping-styles-to-compose-theme/warning-in-dialog.png?authuser=6&hl=ar)
بعد الاستيراد، تقع تهيئة النمط في مشروع استوديو Android. ابحث عنها داخل دليل ui-package-resources/style-mappings
.
ملفات الإعداد للترجمات المخصّصة
تتكون ترجمة أنماط Figma إلى مظاهر Compose من خطوتين:
- تتم ترجمة نمط Figma في حزمة واجهة المستخدم إلى رمز مميز للتصميم في ملف JSON لتعريف حزمة واجهة المستخدم، داخل مجلد حزمة واجهة المستخدم في مشروع استوديو Android الخاص بك.
- تتم ترجمة الرمز المميّز للتصميم في ملف تعريف حزمة واجهة المستخدم إلى مقتطف لرمز المظهر Compose في مشروعك على "استوديو Android".
يعكس تنسيق ملف الإعداد المخصّص (بتنسيق JSON) هاتين الخطوتين. في ما يلي مثال على ملف إعداد مخصّص بسيط يعالج أنماط الألوان فقط:
{
"figma": {
"colors": {
"my-app-theme/sys/light/primary": "myapp.sys.color.primary",
"my-app-theme/sys/light/primary-container": "myapp.sys.color.primary-container",
"my-app-theme/sys/light/background": "myapp.sys.color.background",
"my-app-theme/sys/light/on-background": "myapp.sys.color.on-background",
"my-app-theme/sys/dark/background": "myapp.sys.color.background",
"my-app-theme/sys/dark/on-background": "myapp.sys.color.on-background"
}
},
"compose": {
"colors": {
"myapp.sys.color.primary": "MaterialTheme.colorScheme.primary",
"myapp.sys.color.primary-container": "MaterialTheme.colorScheme.primaryContainer",
"myapp.sys.color.background": "MaterialTheme.colorScheme.background",
"myapp.sys.color.on-background": "MaterialTheme.colorScheme.onBackground"
},
"options": {
"packages": {
"MaterialTheme": "androidx.compose.material3"
}
}
}
}
هناك قسمان من المستوى الأعلى، وهما figma
(الذي يحدّد الخطوة 1) وcompose
(الذي يحدّد الخطوة 2). يتضمّن كلاهما القسم colors
:
- يحدّد القسم
colors
فيfigma
نمط Figma ورمز التصميم المقابل الذي يجب كتابته في ملف تعريف حزمة واجهة المستخدم. - يحدّد القسم
colors
فيcompose
رمزًا مميّزًا للتصميم في ملف تعريف حزمة واجهة المستخدم ومقتطف الرمز المقابل الذي يجب كتابته في رمز ComposeAllowed.
في نموذج التهيئة أعلاه، أي شيء يستخدم اللون my-app-theme/sys/light/primary
في Figma مكتوب لونه كـ myapp.sys.color.primary
في ملف تعريف حزمة واجهة المستخدم. بعد ذلك، أثناء إنشاء الرموز البرمجية، تتم كتابة هذا اللون على هيئة MaterialTheme.colorScheme.primary
في Compose.
يحتوي القسم compose
أيضًا على القسم options
الذي ينص على الحزمة التي يتوفّر فيها رمز رمز معيّن. ينص المثال أعلاه على أن
MaterialTheme
موجودة في حزمة androidx.compose.material3
، والتي يجب بالتالي استيرادها في أي رمز تم إنشاؤه.
يعد تعيين أنماط أسلوب الخط أكثر مشاركة من أنماط الألوان. فيما يلي نفس المثال المذكور أعلاه، ولكن مع إضافة أنماط الخط:
{
"figma": {
"colors": {
"my-app-theme/sys/light/primary": "myapp.sys.color.primary",
"my-app-theme/sys/light/primary-container": "myapp.sys.color.primary-container",
"my-app-theme/sys/light/background": "myapp.sys.color.background",
"my-app-theme/sys/light/on-background": "myapp.sys.color.on-background",
"my-app-theme/sys/dark/background": "myapp.sys.color.background",
"my-app-theme/sys/dark/on-background": "myapp.sys.color.on-background"
},
"typography": {
"symbols": {
"my-app-theme/headline/large": "myapp.sys.typescale.headline-large",
"my-app-theme/body/medium": "myapp.sys.typescale.body-medium"
},
"subproperties": {
"fontFamily": "font",
"fontWeight": "weight",
"fontSize": "size",
"letterSpacing": "tracking",
"lineHeightPx": "line-height"
}
}
},
"compose": {
"colors": {
"myapp.sys.color.primary": "MaterialTheme.colorScheme.primary",
"myapp.sys.color.primary-container": "MaterialTheme.colorScheme.primaryContainer",
"myapp.sys.color.background": "MaterialTheme.colorScheme.background",
"myapp.sys.color.on-background": "MaterialTheme.colorScheme.onBackground"
},
"typography": {
"symbols": {
"myapp.sys.typescale.headline-large": "MaterialTheme.typography.headlineLarge",
"myapp.sys.typescale.body-medium": "MaterialTheme.typography.bodyMedium"
},
"subproperties": {
"font": "fontFamily",
"weight": "fontWeight",
"size": "fontSize",
"tracking": "letterSpacing",
"line-height": "lineHeight"
}
},
"options": {
"packages": {
"MaterialTheme": "androidx.compose.material3"
}
}
}
}
يعكس هيكل أقسام أسلوب الخط حقيقة أن أسلوب الخط يتكون من العديد من الخصائص الفرعية. في Figma وCompose، يتضمن أسلوب الخط اسم الخط الطباعي، ووزن الخط، وحجمه، وتباعد الأحرف، وارتفاع السطر، بالإضافة إلى العديد من ذلك. بدلاً من الحاجة إلى ربط المواقع الفرعية الفردية لكل نمط مرارًا وتكرارًا، نربط الأنماط العامة بالرموز المميّزة والمظاهر، ثم نربط كل موقع فرعي فردي بشكلٍ منفصل.
ينص المثال أعلاه على أنه عند كتابة عنصر نصي في Figma بالنمط
my-app-theme/headline/large
في ملف تعريف حزمة واجهة المستخدم،
يكون خط النص هو myapp.sys.typescale.headline-large.font
، وحجمه
myapp.sys.typescale.headline-large.size
، وهكذا. بعد ذلك، عند إنشاء رمز Compose، يتم
إنشاء عنصر RelayText
قابل للإنشاء (الذي يلّف عنصر Text
القابل للإنشاء في
Compose Material)، حيث تكون المَعلمة font
هي
MaterialTheme.typography.headlineLarge.fontFamily
، والمَعلمة size
هي
MaterialTheme.typography.headlineLarge.fontSize
، وهكذا.
للحصول على أمثلة على ملفات التهيئة، يمكنك إلقاء نظرة على تكوينات Material 3 وMaterial 2 Design Kit المدمجة التي تستخدم التنسيق نفسه بالضبط. يمكنك تنزيل الملفات هنا:
القيود
حاليًا، هناك العديد من المواقف التي لا تتم فيها ترجمة الأنماط إلى موضوعات:
- أنماط النص التي يتم تطبيقها على جزء من عنصر نصي فقط (كما هو موضح في أنماط متعددة في النص)
- إذا كانت هناك أنماط مختلفة مطبقة على متغيرات مختلفة للمكون، تتم ترجمة نمط واحد فقط.
أفلام مُقترَحة لك
- ملاحظة: يتم عرض نص الرابط عند إيقاف JavaScript.
- اعتبارات أخرى
- Kotlin لتطبيق Jetpack Compose
- البيانات ذات النطاق المحلي باستخدام TechnicalLocal