با شروع از اندروید ۱۲، طراحی متریال یو (Material You design) بر بیان و روان بودن در سیستم عامل اندروید تمرکز دارد، با هدف کمک به کاربران برای ایجاد و داشتن یک تجربه واحد و منسجم که نیازهای آنها را برآورده میکند. به عنوان یک شریک اندروید، از شما دعوت میشود تا طراحی متریال یو را در زمینههای زیر در دستگاههای اندروید خود بگنجانید:
- رنگ پویا
- حرکت
- ابزارکها
رنگ پویا
رنگ پویا، محور طراحی Material You و بخش کلیدی استراتژی چند ساله اندروید برای ارائه سفارشیسازی سادهتر و عمیقتر به کاربرانش است، به شیوهای که هیچ دستگاه دیگری این کار را انجام نمیدهد. Material You موارد زیر را ارائه میدهد:
کاربران و توسعهدهندگان، داستانی غنی و مداوم از شخصیسازی موجود در هر دستگاه اندرویدی را تجربه میکنند.
فرصتهایی برای تولیدکنندگان اصلی تجهیزات اندروید تا به نوآوری در رابط کاربری سیستم و برنامههای شخص اول خود به شیوهای که با سختافزار و رنگ، ساخت و شکل برندشان هماهنگ باشد، ادامه دهند.
برای بهرهمندی از رنگ پویا، از داستان استخراج رنگ Android 12 Material You به عنوان بخش کلیدی نرمافزار خود که به کاربران ارائه میدهید، استفاده کنید. در دستگاه، از منطق استخراج رنگ موجود در AOSP استفاده کنید، به خصوص منطقی که یک رنگ منبع تصویر زمینه یا تم را دریافت کرده و آن را از طریق 65 API رنگ خروجی میدهد. برای الزامات رنگ پویا، به بخش «استفاده از رنگ پویا» مراجعه کنید.
جریان کامل رنگ پویا شامل چهار مرحله است، همانطور که در زیر نشان داده شده است:

شکل ۱. جریان رنگ پویای متریال یو
کاربر تصویر زمینه یا تم را از طریق انتخابگر OEM تغییر میدهد.
کاربر یکی از موارد زیر را انتخاب میکند:
تم دستگاه. وقتی این انتخاب انجام شود، اندروید بهطور خودکار یک رنگ منبع واحد را که مطابق با الزامات است، انتخاب میکند.
تصویر زمینه جدید + تم. وقتی انتخاب شود، منطق AOSP به طور خودکار یک رنگ منبع واحد را از تصویر زمینه انتخاب شده انتخاب میکند.
AOSP طبق منطق AOSP، یک منبع رنگ واحد را به ۵ پالت رنگی با ۱۳ نوع رنگ رنگی در هر پالت گسترش میدهد که سپس ۶۵ ویژگی رنگی را در خود جای میدهند.
رابط کاربری برنامه از ۶۵ ویژگی رنگی به گونهای استفاده میکند که در سراسر اکوسیستم برنامههای اندروید سازگار باشد. توصیه میشود از پالت رنگی یکسانی برای رابط کاربری سیستم دستگاه و برنامههای خاص تولیدکنندگان اصلی (OEM) استفاده کنید.
وصلههای اندروید ۱۲
برای دریافت منطق سرتاسری برای استخراج رنگ تصویر زمینه و فعال کردن دستگاه برای پر کردن APIهای ۶۵ رنگی به روشی که با اکوسیستم سازگار باشد، وصلههای زیر را در پیادهسازی اندروید ۱۲ خود لحاظ کنید:
اجباری
اکیداً توصیه میشود
- هنگام تنظیم sysprops رنگ بوت، شرایط مسابقه را برطرف کنید.
- اجازه دهید پوششها در مورد تغییرات قالب مطلع شوند
- رفع مشکل شرایط مسابقه هنگام تنظیم رنگ بوت sysprops (دور دوم)
- FeatureFlags را به بسته flags منتقل کنید.
- پشتیبانی از قالببندی چندکاربره را به درستی پیادهسازی کنید
- رفع مشکل عدم نمایش گزینه رنگ تصویر زمینه مشخص شده پس از راه اندازی مجدد
- رفع خطای محاسبه رنگ ثالثیه
- به برنامههای پسزمینه اجازه تغییر تم ندهید
تعیین رنگهای سفارشی در ThemePicker
اگر از برنامه AOSP ThemePicker استفاده میکنید، برنامه WallpaperPicker در صورت برآورده شدن هر دو شرط زیر، بخش رنگ را نشان میدهد:
-
flag_monetدرframeworks/base/packages/SystemUI/res/values/flags.xmltrueاست. - یک فایل APK سیستمی با نام بسته در
themes_stub_packageدر فایلpackages/apps/ThemePicker/res/values/override.xmlتعریف شده است.
فرمت APK خرد
یک نسخه نمونه از این APK را میتوانید در packages/apps/ThemePicker/themes پیدا کنید.
این APK باید فقط شامل منابعی باشد که جزئیات رنگهای پایه موجود و نام آنها را شرح دهد.
این مقاله باید حاوی یک فایل XML تحت res/xml با فرمت زیر باشد:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="color_bundles">
<item>color1</item>
<item>color2</item>
<item>color3</item>
<item>color4</item>
</array>
<string name="bundle_name_color1">Blue</string>
<string name="bundle_name_color2">Red</string>
<string name="bundle_name_color3">Yellow</string>
<string name="bundle_name_color4">Green</string>
</resources>
در این فایل، هر item درون color_bundles نام مشخصی دارد، مادامی که رشتههای زیر به bundle_name_ item نامگذاری شوند.
برای هر رنگ باید یک رشته bundle_name_ item به همراه یک نام توصیفی برای هر رنگ وجود داشته باشد. این موارد را میتوان با اضافه کردن رشتههای ترجمه شده مربوطه به دایرکتوریهای res/values- language code ترجمه کرد.
مقادیر رنگ واقعی میتوانند یا در همان XML یا در یک فایل XML منابع جداگانه با فرمت زیر باشند:
<resources>
<color name="color_primary_color1">#0000FF</color>
<color name="color_secondary_color1">#0000FF</color>
<color name="color_primary_color2">#ff0000</color>
<color name="color_secondary_color2">#ff0000</color>
<color name="color_primary_color3">#ffff00</color>
<color name="color_secondary_color3">#ffff00</color>
<color name="color_primary_color4">#00ff00</color>
<color name="color_secondary_color4">#00ff00</color>
</resources>
برای هر آیتم در آرایه color bundles، باید یک ورودی color_primary_ item و یک ورودی color_secondary_ item وجود داشته باشد (و هر دو رنگ باید همرنگ باشند). مقادیر این ورودیهای color کدهای رنگ واقعی برای هر رنگ هستند که در بخش رنگ پایه نمایش داده میشوند.
مرحله ۱: یک تجربه قالببندی کاربر ایجاد کنید
انتخابگر تم جایی است که کاربران با قابلیتهای جدید شخصیسازی Material You درگیر میشوند و میتوانند بین گزینههای رنگ یا تنظیمات از پیش تعیینشده انتخاب کنند. از آنجایی که این گزینه با محصول و جمعیت کاربر شما مطابقت دارد، میتوانید با استفاده از انتخابگر تم یا انتخابگر تصویر زمینه ، شخصیسازی و تجربه رنگی غنیتری را به کاربران ارائه دهید.
- هنگام استفاده از انتخابگر تصویر زمینه، استخراج رنگ تصویر زمینه به طور پیشفرض فعال است. با این حال، میتوانید انتخابگر را سفارشیسازی کنید تا گزینههای بیشتری در اختیار کاربر قرار گیرد.
مرحله ۲: استخراج رنگ تصویر زمینه به یک رنگ منبع
برای فعال کردن استخراج رنگ تصویر زمینه، پچهای اندروید ۱۲ که در بالا ذکر شده است را انتخاب کنید (این قابلیت به طور پیشفرض در نسخههای بعدی AOSP فعال خواهد شد). منطق AOSP که استخراج تصویر زمینه را فعال میکند، از frameworks/base/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java ، روی ThemeOverlayController#mOnColorsChangedListener ، از طریق WallpaperManager#onWallpaperColorsChanged شروع میشود. توصیه میکنیم برای اطمینان از یک تجربه توسعه پایدار، از منطق AOSP اصلاح نشده استفاده کنید.
به طور پیشفرض، منطق، رنگی را انتخاب میکند که بالاترین فرکانس را دارد و برای استفاده مناسب است. برای بهرهگیری از سایر رنگهای منبع که توسط الگوریتم بازگردانده میشوند و ارائه آن رنگها به کاربران در انتخابگر تم، از ColorScheme#getSeedColors(wallpaperColors: WallpaperColors) استفاده کنید.
برای اینکه یک رنگ منبع (چه از تصویر زمینه استخراج شده باشد و چه از پیش تعیین شده توسط کاربر) مناسب برای استفاده باشد، باید حداقل مقدار کرومای CAM16 برابر با ۵ داشته باشد؛ این امر تضمین میکند که رنگ منبع هنگام تبدیل از یک رنگ واحد به ۶۵ رنگ تونال، تحت تأثیر تُنهای تیره ظریف قرار نگیرد و نمایانگر انتخاب کاربر باقی بماند. برای خواندن و اصلاح رنگها در CAM16، از Cam#fromInt یا Cam#getInt استفاده کنید.
استفاده از پالت رنگ غیر پویا برای دستگاههایی که از استخراج رنگ تصویر زمینه پشتیبانی نمیکنند، میتوانید با انجام موارد زیر از نمایش عالی برنامههای گوگل و برنامههای شخص ثالث که از رنگ پویا پشتیبانی میکنند، اطمینان حاصل کنید:
- با غیرفعال کردن
flag_monetدرframeworks/base/packages/SystemUI/res/values/flags.xmlاز پالت متریال پیشفرض استفاده کنید.- اطمینان حاصل کنید که کاربران هنوز هم میتوانند سیستم عامل خود را با استفاده از یک انتخابگر تم از پیش تعیین شده شخصیسازی کنند.
مرحله ۳: رنگ منبع را به APIهای رنگ بسط دهید
با استفاده از رنگ منبع واحد مشتق شده از مرحله قبل، اندروید ۵ پالت تُن منحصر به فرد (رنگهای برجسته ۱-۳، رنگهای خنثی ۱-۲) تولید میکند که هر پالت شامل ۱۳ رنگ و هر رنگ شامل مقادیر روشنایی مختلف (۰ تا ۱۰۰۰) است و در مجموع ۶۵ رنگ میشود. منطق ارائه شده در پچهای اندروید ۱۲، این بسط رنگ را به درستی پیادهسازی میکند. جزئیات ارائه شده در زیر، پیادهسازی را شرح میدهد.
برای ثبات در ظاهر، ۵ پالت تُن (accent1، accent2، accent3، neutral1، neutral2) و ۱۳ رنگ متناظر آنها باید بر اساس رنگ منبع واحد با تغییرات مربوطه در مقادیر کروما و رنگ CAM16 مطابق با موارد زیر باشند:
- کروما: از عدد "16" استفاده کنید
- رنگ: همان منبع
- کروما: از عدد "۳۲" استفاده کنید
- رنگ: چرخش ۶۰ درجه مثبت
- کروما: از عدد "4" استفاده کنید
- رنگ: همان منبع
- کروما: از عدد "8" استفاده کنید
- رنگ: همان منبع
CTS شامل تستهایی برای اعتبارسنجی فراخوانیهای API مربوط به روشنایی و رنگ است. برای اجرا، atest SystemPalette استفاده کنید.
مرحله ۴: از رنگهای پویا در برنامهها و رابط کاربری سیستم استفاده کنید
پس از تنظیم رنگهای پویا روی دستگاه، برنامهها برای استفاده از رنگها از دستورالعملهای Material پیروی میکنند. دستورالعملهای Material قرار است تا ۲۶ اکتبر ۲۰۲۱ در material.io منتشر شوند تا برنامههای شخص ثالث بتوانند از آنها استفاده کنند. برای رابط کاربری سیستم و برنامههای شخص ثالث، اکیداً توصیه میکنیم رنگهای پویا را در سراسر تجربه کاربری به گونهای ادغام کنید که با سختافزار و برند شما متناسب باشد و به شما در تمایز دستگاههایتان کمک کند.
برای راهنمایی کلی در مورد رنگهای پویا، به موارد زیر مراجعه کنید:
از رنگهای تأکیدی برای عناصر پیشزمینه در برنامهها و رابط کاربری سیستم استفاده کنید:
@android:color/system_accent1_0 … 1000 // most-used foreground color group @android:color/system_accent2_0 … 1000 // alternate accent, used for surfaces @android:color/system_accent3_0 … 1000 // playful, analogous colorاز رنگهای خنثی برای عناصر پسزمینه در برنامهها و رابط کاربری سیستم استفاده کنید:
@android:color/system_neutral1_0 … 1000 // most-used background color group @android:color/system_neutral2_0 … 1000 // used for higher-elevation surfaces
برای اطلاعات بیشتر در مورد نحوه نگاشت رنگها توسط Material You و نحوه استفاده از APIها در SysUI، به منابع اضافی مراجعه کنید.
مرحله 5: گزینههای رنگ پویا را در پیادهسازی AOSP WallpaperPicker خود اضافه کنید
برای اندروید ۱۳ و بالاتر بسازید
با شروع از اندروید ۱۳، android.theme.customization.accent_color منسوخ شده است. یک ویژگی جدید android.theme.customization.theme_style برای پشتیبانی از انواع رنگهای مختلف اضافه شده است. در حال حاضر چهار نوع رنگ در کدبیس به شرح زیر داریم:
TONAL_SPOT = Default Material You theme since Android S.
VIBRANT = Theme where accent 2 and 3 are analogous to accent 1.
EXPRESSIVE = Highly chromatic theme.
SPRITZ = Desaturated theme, almost grayscale.
این موارد به Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES ارسال میشوند، همانطور که در JSON زیر نشان داده شده است:
{
"android.theme.customization.system_palette":"B1611C",
"android.theme.customization.theme_style":"EXPRESSIVE"
}
برای اندروید ۱۲ و پایینتر بسازید
هنگام استفاده از انتخابگر تم سفارشی، دستگاه باید با ارائه یک فایل JSON با فرمت زیر (که در آن 746BC1 یک نمونه رنگ منبع معتبر است)، یک رنگ منبع معتبر را به Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES ارسال کند:
{
"android.theme.customization.system_palette":"746BC1",
"android.theme.customization.accent_color":"746BC1"
}
انجام این کار، استخراج رنگ تصویر زمینه (مرحله ۲) را حذف میکند و مستقیماً رنگ منبع ارائه شده را به ۶۵ ویژگی رنگی گسترش میدهد (مرحله ۳).
مرحله 6: ثبت تیکت
علاوه بر یکپارچهسازی سیستم، شما باید یک تیکت ثبت کنید و نام تجاری خود ( Build.MANUFACTURER ) را به ما اطلاع دهید. از آنجایی که اکثر برنامههای شخص ثالث از کامپوننتهای متریال برای اندروید برای نمایش رنگهای پویا استفاده میکنند، ما از یک لیست مجاز کدگذاری شده استفاده میکنیم تا بگوییم کدام دستگاهها ویژگی پالتهای رنگ پویا را ادغام کردهاند.
حرکت
حرکت روان باعث میشود دستگاهها مدرن و باکیفیت به نظر برسند. برای ایجاد و حفظ اعتماد و رضایت توسعهدهندگان، overscroll و ripple دو بخش کلیدی حرکت روان هستند که باید از نظر ظاهری و حسی سازگار باشند.
استفاده از overscroll در سیستم عامل شما
اندروید ۱۲ شامل یک حرکت پیمایش پویاتر و واکنشگراتر به شکل کشش نما است که وقتی کاربر سعی میکند از لبه یک لیست عبور کند، نشان داده میشود. مثالی در زیر نشان داده شده است:

شکل ۲. افکت اسکرول اندروید ۱۲، همانطور که در تنظیمات نشان داده شده است
برای هماهنگی بیشتر بین توسعهدهندگان، مطمئن شوید که تأثیر کلی پیمایش بیش از حد در دستگاههای شما مشابه موارد زیر باشد:
در دستگاههایی که برای
ActivityManager.isHighEndGfx()مقدار true برمیگردانند، اثر overscroll به صورت کشش غیرخطی صفحه نمایش است (مطابق شکل بالا).در دستگاههای با عملکرد پایینتر، اثر کشش به یک کشش خطی ساده میشود (تا بار روی سیستم کاهش یابد).
استفاده از overscroll در برنامههای شخص ثالث
هنگام استفاده از نماهای سفارشی، ممکن است لازم باشد برخی از برنامهها و رابط کاربری سیستم را که از جلوه کششی استفاده میکنند، تغییر دهید.
برای پشتیبانی از پیمایش کششی، کتابخانهها را به جدیدترین نسخه ارتقا دهید:
-
androidx.recyclerview:recyclerview:1.3.0-alpha01برایRecyclerView -
androidx.core:core:1.7.0-alpha01برایNestedScrollViewوEdgeEffectCompat -
androidx.viewpager:viewpager:1.1-alpha01برایViewPager
-
برای طرحبندیهای سفارشی که
EdgeEffectاستفاده میکنند، تغییرات UX زیر را در نظر بگیرید:با قابلیت اسکرول کششی، کاربران نباید در حین کشیده شدن طرحبندی با محتوای آن تعامل داشته باشند. کاربران باید فقط خودِ کشش را دستکاری کنند و مثلاً نتوانند دکمهای را در محتوا فشار دهند.
وقتی کاربران هنگام اجرای انیمیشن
EdgeEffect، محتوا را لمس میکنند، باید انیمیشن را دریافت کرده و اجازه داشته باشند میزان کشش را دستکاری کنند. مقدار فعلی pull ازEdgeEffectCompat.getDistance()قابل دسترسی است.برای دستکاری مقدار pull و بازگرداندن مقدار مصرف شده، از
onPullDistance()استفاده کنید. این به توسعهدهندگان اجازه میدهد تا به راحتی از حالت کشش به پیمایش تغییر حالت دهند، زیرا انگشت محتوا را از موقعیت شروع خارج میکند و از حالت کشش خارج میکند.هنگام کار با پیمایش تو در تو، اگر محتوا کشیده شود، کشش باید قبل از محتوای تو در تو، حرکت لمسی را مصرف کند، در غیر این صورت ممکن است هنگام تغییر جهت انگشت به جای رها کردن کشش، پیمایش تو در تو انجام شود.
برای جزئیات بیشتر در مورد پیمایش بیش از حد، به «متحرک کردن حرکت پیمایش» مراجعه کنید.
استفاده از موج (بازخورد لمسی) در سیستم عامل شما
اندروید ۱۲ شامل یک موج لمسی نرمتر و ظریفتر است تا هنگام لمس کردن، بازخوردی را به کاربران ارائه دهد.

شکل ۳. افکت موجدار اندروید ۱۲، با انیمیشن پرکنندهی نرمتر
برای پیشبینیپذیری توسعهدهندگان و ارائه یک تجربه کاربری عالی، اطمینان حاصل کنید که اثر موجی روی دستگاههای شما مشابه مثال نشان داده شده در بالا باشد. در حالی که نیازی به انجام مراحل ادغام خاصی برای پشتیبانی از اثرات موجی ندارید، باید این اثر را روی دستگاههای خود آزمایش کنید تا هرگونه رگرسیون ناخواستهای که در پیادهسازی شما ایجاد شده است را بررسی کنید.
ابزارکها
ویجتها اجزای کلیدی یک دستگاه اندرویدی هستند. اندروید ۱۲ شامل APIها و قابلیتهای API جدیدی است که همه تولیدکنندگان اصلی تجهیزات (OEM) باید از آنها پشتیبانی کنند.
در سیستم عامل خود، از APIهای توسعهدهندگان مربوط به طرحبندی ویجتها، اندازهبندی و پارامترهای نرمافزاری (به عنوان مثال، اندازه گوشههای گرد) پشتیبانی کنید. پیادهسازی شما باید به درستی از ویجتها در ارائه پارامترها از طریق APIها و اطمینان از قابل تنظیم و اندازهپذیر بودن ویجتها توسط کاربر پشتیبانی کند.
در برنامههای خود، در صورت امکان از قابلیتهای جدید API برای بهروزرسانی یا ساخت ویجتهای شخص ثالث جدید استفاده کنید. برای همه ویجتهای برنامه شخص ثالث در حوزه کاری خود، چک لیست توسعهدهندگان زیر را اجرا کنید.
- اولویت بر اساس توصیههای پلتفرم است.
- برای جزئیات بیشتر در مورد یک توصیه، پیوند موجود در ستون تغییر را دنبال کنید.
مساحت تغییر اولویت اجرا بهبود تجربه خانه پیشنمایشهای مقیاسپذیر اضافه کنید پی۱ توضیحات ویجت را اضافه کنید پی۱ شخصیسازی ابزارکها را آسانتر کنید P2 (اختیاری) انتقالهای روانتر را فعال کنید پ0 از ترامپولینهای پخشکننده دوری کنید پ0 دستورالعملهای ویجت را اتخاذ کنید بهبود اندازه و طرحبندی ویجتها پی۲ اعمال رنگهای پویا پ0 پیادهسازی گوشههای گرد پ0 اضافه کردن دکمههای ترکیبی جدید پی۲ کد ویجت موجود را ساده کنید سادهسازی مجموعههای RemoteView پی۲ سادهسازی زمان اجرای RemoteView پی۲
منابع اضافی
استفاده از رنگ SysUI
(accent1 = A1، accent2 = A2، accent3 = A3، neutral1 = N1، neutral2 = N2)

شکل ۴. استفاده از رنگهای پویا در رابط کاربری سیستم
بهروزرسانیهای ویژگیهای رنگ کتابخانه مواد
متریال در نسخه بعدی، با ایجاد نقشهای رنگی که برای تأمین رنگ نماهای خاص استفاده میشوند، ویژگیهای تم خود را بهروزرسانی خواهد کرد.
| نقش رنگ | ویژگی تم اندروید | تم روشن رنگ پویا | تم تیره رنگ پویا |
|---|---|---|---|
| اولیه | رنگاولیه | system_accent1_600 | system_accent1_200 |
| در مقطع ابتدایی | رنگ در حالت اولیه | system_accent1_0 | system_accent1_800 |
| ثانویه | رنگ ثانویه | system_accent2_600 | system_accent2_200 |
| در ثانویه | colorOnSecondary | system_accent2_0 | system_accent2_800 |
| خطا | خطای رنگ | ناموجود (red_600) | ناموجود (red_200) |
| در مورد خطا | خطای رنگ | ناموجود (سفید) | ناموجود (red_900) |
| پیشینه | اندروید:رنگ پسزمینه | سیستم_خنثی1_10 | system_neutral1_900 |
| در پسزمینه | رنگ روی پسزمینه | system_neutral1_900 | سیستم_خنثی1_100 |
| سطح | رنگسطح | سیستم_خنثی1_10 | system_neutral1_900 |
| روی سطح | رنگ روی سطح | system_neutral1_900 | سیستم_خنثی1_100 |
متریال ویژگیهای حالتهای خود را با اشارهگرهای زیر بهروزرسانی خواهد کرد:
| نقش رنگ | ویژگی تم اندروید | تم روشن رنگ پویا | تم تیره رنگ پویا |
|---|---|---|---|
| محتوای حالت اولیه | رنگحالت اولیهمحتوای | system_accent1_700 | system_accent1_200 |
| لایه حالت اولیه | لایه حالت اولیه رنگ | system_accent1_600 | system_accent1_300 |
| محتوای حالت ثانویه | محتوای وضعیت ثانویه رنگ | system_accent2_700 | system_accent2_200 |
| لایه حالت ثانویه | لایه حالت ثانویه رنگ | system_accent2_600 | system_accent2_300 |
| در مورد محتوای حالت اولیه | colorOnPrimaryStateContent | system_accent1_0 | system_accent1_800 |
| روی لایه حالت اولیه | لایه وضعیت رنگ اولیه | system_accent1_900 | system_accent1_800 |
| در مورد محتوای حالت ثانویه | colorOnSecondaryStateContent | system_accent2_0 | system_accent2_800 |
| در لایه حالت ثانویه | لایه حالت رنگ در ثانویه | system_accent2_900 | system_accent2_800 |
| روی محتوای وضعیت کانتینر اصلی | colorOnPrimaryContainerStateContent | system_accent1_900 | system_accent1_900 |
| در لایه حالت کانتینر اصلی | colorOnPrimaryContainerStateLayer | system_accent1_900 | system_accent1_900 |
| روی محتوای وضعیت کانتینر ثانویه | colorOnsecondaryContainerStateContent | system_accent2_900 | system_accent2_900 |
| در لایه حالت کانتینر ثانویه | colorOnSecondaryContainerStateLayer | system_accent2_900 | system_accent2_900 |
| در مورد محتوای حالت کانتینر ثالثیه | colorOnTertiaryContainerStateContent | system_accent3_900 | system_accent3_900 |
| در لایه حالت کانتینر ثالثیه | colorOnTertiaryContainerStateLayer | system_accent3_900 | system_accent3_900 |
| محتوای حالت سطحی | colorOnSurfaceStateContent | system_neutral1_900 | سیستم_خنثی1_100 |
| روی لایه حالت سطحی | لایه حالت روی سطح (colorOnSurfaceStateLayer) | system_neutral1_900 | سیستم_خنثی1_100 |
| محتوای حالت متغیر روی سطح | colorOnSurfaceVariantStateContent | سیستم_خنثی_2_700 | سیستم_خنثی_2_200 |
| لایه حالت متغیر روی سطح | colorOnSurfaceVariantStateLayer | سیستم_خنثی_2_700 | سیستم_خنثی_2_200 |
| محتوای وضعیت خطا | colorErrorStateContent | قرمز800 | قرمز۲۰۰ |
سوالات متداول
استخراج رنگ
وقتی کاربر تصویر زمینه را تغییر میدهد، آیا استخراج رنگ به طور خودکار انجام میشود یا باید از جایی فعال شود؟
با وصلههای اندروید ۱۲ ، استخراج رنگ تصویر زمینه به طور پیشفرض فعال است.
ThemeOverlayController.java منطق را با ThemeOverlayController#mOnColorsChangedListener و WallpaperManager#onWallpaperColorsChanged فعال میکند.
برای والپیپرهای زنده یا والپیپرهای ویدیویی ، آیا میتوانیم بفهمیم که قابلیت استخراج رنگ چه زمانی رنگ را از صفحه نمایش میگیرد؟ برخی از کاربران ممکن است رنگهای آخرین فریم را بخواهند، زیرا در بیشترین زمان نمایش داده میشود.
استخراج رنگ زمانی آغاز میشود که کاربر تصویر زمینه را تنظیم میکند یا پس از چرخه روشن/خاموش شدن صفحه نمایش (در پاسخ به WallpaperEngine#notifyColorsChanged ). آخرین رویداد WallpaperColors (از تصویر زمینه زنده) پس از خاموش و روشن کردن مجدد صفحه توسط کاربر اعمال میشود.
انتخابگر تم/تصویر زمینه
چگونه میتوانم انتخابگر تم را طوری فعال کنم که چندین رنگ منبع را به جز رنگی که بیشترین تکرار را دارد، برای انتخاب کاربران نشان دهد؟ آیا راهی وجود دارد که آن رنگها را از منطق استخراج دریافت کنم؟
بله. در انتخابگر تم خود، میتوانید ColorScheme#getSeedColors(wallpaperColors: WallpaperColors) استفاده کنید.
یک ویژگی در نامهای پیکسل به عنوان آیکونهای تمدار وجود دارد. آیا این ویژگی در سه پچی که به اشتراک گذاشتهاید، گنجانده شده است؟ تولیدکنندگان اصلی تجهیزات (OEM) چگونه میتوانند آن را پیادهسازی کنند؟
خیر. آیکونهای دارای تم در نسخه بتا هستند و در اندروید ۱۲ در دسترس نیستند.
آیا راهی وجود دارد که بتوان از برنامهی تصویر زمینهی گوگل با قابلیت استخراج و انتخاب رنگ استفاده کرد؟
بله. این ویژگیها را میتوان با دنبال کردن مراحل ادغام که قبلاً در این صفحه توضیح داده شده است، در آخرین نسخه برنامه Google Wallpaper پیادهسازی کرد.
برای اطلاعات بیشتر با TAM خود تماس بگیرید.
آیا گوگل میتواند برنامه یا کد منبع را به اشتراک بگذارد تا تولیدکنندگان اصلی تجهیزات بتوانند نسخه خودشان از پیشنمایش رنگ پویا را در منوی تنظیمات خود پیادهسازی کنند، که شبیه به بخش پیشنمایش نشان داده شده در برنامه انتخاب تصویر زمینه گوگل باشد؟
کلاسهای اصلی که پیشنمایش را رندر میکنند WallpaperPicker2 و Launcher3 هستند.
صفحه پیشنمایش تصویر زمینه، WallpaperSectionController است.
چگونه میتوان پیشنمایش را پس از تغییر رنگ، همانطور که در برنامهی تصویر زمینهی گوگل نشان داده شده است، پیادهسازی کرد؟
برنامه انتخاب تصویر زمینه انتظار دارد که یک ContentProvider از Launcher در دسترس باشد (یک لانچر مبتنی بر Launcher3 آن را دارد). پیشنمایش توسط GridCustomizationsProvider در Launcher ارائه میشود که باید در فراداده اصلی Activity لانچر برای خواندن تصویر زمینه و برنامه استایل به آن ارجاع داده شود. همه اینها در Launcher3 AOSP پیادهسازی شده و در دسترس OEMها است.