موادی که شما طراحی می کنید

با شروع Android 12، Material You Design بر بیان و روان بودن در سیستم عامل اندروید تمرکز دارد، با هدف کمک به کاربران برای ایجاد و داشتن یک تجربه منسجم و منسجم مطابق با نیازهایشان. به‌عنوان یک شریک Android، تشویق می‌شوید که موادی را که طراحی می‌کنید در بخش‌های زیر در دستگاه‌های Android خود بگنجانید:

  • رنگ پویا
  • حرکت
  • ابزارک ها

رنگ پویا

رنگ پویا محور اصلی طراحی Material You است و بخش مهمی از استراتژی چند ساله اندروید برای ارائه سفارشی سازی ساده تر و عمیق تر به کاربرانش است، به گونه ای که دستگاه های دیگر انجام نمی دهند. موادی که ارائه می دهید:

  • کاربران و توسعه دهندگان یک داستان ثابت و غنی از شخصی سازی در هر دستگاه اندرویدی موجود است.

  • OEM های اندروید فرصت هایی را برای ادامه نوآوری رابط کاربری سیستم و برنامه های شخص اول به گونه ای که با رنگ، ساخت و شکل سخت افزار و برند آنها هماهنگ است، ادامه دهند.

برای استفاده از رنگ پویا، از داستان استخراج رنگ Android 12 Material You به عنوان بخش کلیدی نرم افزار خود به کاربران استفاده کنید. در دستگاه، از منطق استخراج رنگ که در AOSP است، استفاده کنید، به خصوص منطقی که یک تصویر زمینه یا رنگ منبع تم را می گیرد و آن را از طریق 65 API رنگی خروجی می دهد. برای نیازهای رنگ پویا، به استفاده از رنگ پویا مراجعه کنید.

جریان کامل رنگ پویا شامل چهار مرحله است که در زیر نشان داده شده است:

مواد شما رنگ جریان

شکل 1. مواد شما جریان رنگ پویا

  1. کاربر تصویر زمینه یا تم را از طریق انتخابگر OEM تغییر می دهد.

  2. کاربر یکی از موارد زیر را انتخاب می کند:

    • تم دستگاه. پس از انتخاب، Android به طور خودکار یک رنگ منبع واحد را انتخاب می کند که شرایط را برآورده می کند.

    • والپیپر + تم جدید. پس از انتخاب، منطق AOSP به طور خودکار یک رنگ منبع واحد را از تصویر زمینه انتخاب شده انتخاب می کند.

  3. AOSP مطابق با منطق AOSP، رنگ منبع تک را به 5 پالت تونال با 13 رنگ تونال هر کدام گسترش می دهد، که سپس 65 ویژگی رنگ را پر می کند.

  4. رابط کاربری برنامه از 65 ویژگی رنگی استفاده می کند که در سراسر اکوسیستم برنامه اندروید یکسان است. تشویق می‌شوید از همان پالت رنگی برای رابط کاربری سیستم دستگاه و برنامه‌های خاص OEM استفاده کنید.

وصله های اندروید 12

برای دریافت منطق انتها به انتها برای استخراج رنگ کاغذدیواری و فعال کردن دستگاه برای پر کردن APIهای 65 رنگ به روشی که با اکوسیستم سازگار است، وصله‌های زیر را در اجرای Android 12 خود وارد کنید:

تعیین رنگ های سفارشی در ThemePicker

اگر از برنامه AOSP ThemePicker استفاده می‌کنید، برنامه WallpaperPicker بخش رنگ را در صورت وجود هر دو شرایط زیر نشان می‌دهد:

  • flag_monet در frameworks/base/packages/SystemUI/res/values/flags.xml true است.
  • یک 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_primary_ item و یک color_secondary_ item وجود داشته باشد (و هر دو رنگ باید یک رنگ باشند). مقادیر این ورودی‌های color ، کدهای رنگ واقعی برای هر رنگ است که در بخش رنگ اصلی نشان داده می‌شود.

مرحله 1: ایجاد یک تجربه موضوعی کاربر

انتخاب کننده تم جایی است که کاربران با قابلیت های شخصی سازی جدید Material You درگیر می شوند و به طور بالقوه بین گزینه های رنگی یا از پیش تنظیم شده انتخاب می کنند. همانطور که با محصول و جمعیت کاربر شما مطابقت دارد، می توانید با استفاده از انتخابگر تم یا انتخابگر کاغذ دیواری، تجربه شخصی سازی و رنگی غنی تری را به کاربران ارائه دهید.

  • هنگام استفاده از انتخابگر کاغذ دیواری، استخراج رنگ کاغذ دیواری به طور پیش فرض روشن است. با این حال، می‌توانید برخی سفارشی‌سازی‌ها را برای انتخابگر انجام دهید تا گزینه‌های بیشتری را در اختیار کاربر قرار دهید.

مرحله 2: رنگ کاغذ دیواری را به رنگ منبع استخراج کنید

برای فعال کردن استخراج رنگ کاغذدیواری، وصله‌های Android 12 فهرست شده در بالا را انتخاب کنید (این عملکرد به‌طور پیش‌فرض در نسخه آینده AOSP فعال خواهد شد). منطق AOSP که استخراج کاغذدیواری را آغاز می‌کند، از frameworks/base/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java ، در ThemeOverlayController#mOnColorsChangedListener ، از طریق WallpaperManager#onWallpaperColorsChanged . توصیه می کنیم از منطق AOSP اصلاح نشده برای اطمینان از تجربه توسعه پایدار استفاده کنید.

به طور پیش فرض، منطق بالاترین فرکانس رنگی را که برای استفاده مناسب است انتخاب می کند. برای استفاده از دیگر رنگ‌های منبع بازگشتی توسط الگوریتم و ارائه آن رنگ‌ها به کاربران در انتخاب‌کننده تم، ColorScheme#getSeedColors(wallpaperColors: WallpaperColors) استفاده کنید.

برای اینکه برای استفاده مناسب باشد، یک رنگ منبع (چه از کاغذ دیواری استخراج شده باشد و چه از پیش تنظیم شده توسط کاربر) باید حداقل مقدار کروم CAM16 5 داشته باشد. این تضمین می‌کند که رنگ مبدأ تحت تأثیر رنگ‌های تیره ظریف قرار نمی‌گیرد، زمانی که از یک رنگ به رنگ 65 تنی تبدیل می‌شود و نماینده انتخاب کاربر باقی می‌ماند. برای خواندن و تغییر رنگ ها در CAM16، Cam#fromInt یا Cam#getInt استفاده کنید.

استفاده از پالت رنگ غیر پویا برای دستگاه‌هایی که از استخراج رنگ کاغذدیواری پشتیبانی نمی‌کنند، همچنان می‌توانید با انجام کارهای زیر مطمئن شوید که برنامه‌های Google و برنامه‌های شخص ثالثی که رنگ پویا را پشتیبانی می‌کنند عالی به نظر می‌رسند:

  • با غیرفعال کردن flag_monet در frameworks/base/packages/SystemUI/res/values/flags.xml از پالت Material پیش‌فرض استفاده کنید.
  • اطمینان حاصل کنید که کاربران همچنان می توانند سیستم عامل خود را با استفاده از انتخابگر تم از پیش تعیین شده شخصی سازی کنند.

مرحله 3: رنگ منبع را به APIهای رنگی گسترش دهید

با استفاده از رنگ منبع واحد مشتق شده از مرحله قبل، اندروید 5 پالت تونال منحصر به فرد (لهجه 1-3، خنثی 1-2)، هر پالت شامل 13 رنگ، و هر رنگ شامل مقادیر مختلف درخشندگی (0 تا 1000) را تولید می کند. در مجموع 65 رنگ منطق ارائه شده در وصله های اندروید 12 این گسترش رنگ را به درستی پیاده سازی می کند. جزئیات ارائه شده در زیر پیاده سازی را شرح می دهد.

برای سازگاری برنامه‌نویس، 5 پالت تونال (accent1، accent2، accent3، neutral1، neutral2) و 13 رنگ متناظر آن‌ها باید براساس رنگ منبع واحد با تغییرات مربوطه به مقادیر رنگی و رنگی CAM16 مطابق زیر نوشته شده باشند:

  • system_accent1

    • Chroma: از "40" برای انواع رنگ هایی که به 0 ، 10 ، 50 و 100 ختم می شوند، استفاده کنید، در غیر این صورت "48"
    • رنگ: همان منبع
  • system_accent2

    • Chroma: از "16" استفاده کنید
    • رنگ: همان منبع
  • system_accent3

    • Chroma: از "32" استفاده کنید
    • رنگ: چرخش 60 درجه مثبت
  • system_neutral1

    • Chroma: از "4" استفاده کنید
    • رنگ: همان منبع
  • system_neutral2

    • Chroma: از "8" استفاده کنید
    • رنگ: همان منبع

CTS شامل تست‌هایی برای اعتبارسنجی فراخوان‌های API روشنایی و رنگ است. برای اجرا، از atest SystemPalette استفاده کنید.

مرحله 4: از رنگ های پویا در برنامه ها و رابط کاربری سیستم استفاده کنید

پس از تنظیم رنگ‌های پویا روی دستگاه، برنامه‌ها دستورالعمل‌های 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 خود اضافه کنید

ساخت برای اندروید 13 و بالاتر

با شروع Android 13، 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.

همانطور که در JSON در زیر نشان داده شده است، به Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES ارسال می‌شوند:

{
    "android.theme.customization.system_palette":"B1611C",
    "android.theme.customization.theme_style":"EXPRESSIVE"
}

ساخت برای اندروید 12 و پایین تر

هنگام استفاده از انتخابگر طرح زمینه سفارشی، دستگاه باید یک رنگ منبع معتبر را با ارائه یک فایل JSON در قالب زیر به Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES ارسال کند (که در آن 746BC1 یک نمونه رنگ منبع معتبر است):

{
      "android.theme.customization.system_palette":"746BC1",
      "android.theme.customization.accent_color":"746BC1"
}

با انجام این کار، استخراج رنگ کاغذ دیواری (مرحله 2) حذف می شود و مستقیماً رنگ منبع ارائه شده را به 65 ویژگی رنگی گسترش می دهد (مرحله 3).

مرحله ششم: بلیط را ثبت کنید

علاوه بر ادغام سیستم، شما باید یک بلیط ارسال کنید و نام تجاری خود را به ما اطلاع دهید ( Build.MANUFACTURER ). از آنجایی که اکثر برنامه‌های شخص ثالث از Material Components برای Android برای نشان دادن رنگ‌های پویا استفاده می‌کنند، ما از یک لیست مجاز کدگذاری شده برای تشخیص اینکه کدام دستگاه‌ها ویژگی پالت‌های رنگی پویا را ادغام کرده‌اند، استفاده می‌کنیم.

حرکت

حرکت سیال باعث می شود دستگاه ها احساس مدرن و ممتازی داشته باشند. برای ایجاد و حفظ اعتماد و خوشحالی توسعه‌دهندگان، Overscroll و Ripple دو بخش کلیدی حرکت سیال هستند که نیاز به ظاهر و احساس سازگاری دارند.

استفاده از overscroll در سیستم عامل

اندروید 12 شامل یک حرکت پیمایشی پویاتر و پاسخگوتر به شکل کشش دید است که زمانی که کاربر سعی می کند از لبه لیست عبور کند نشان داده می شود. یک مثال در زیر نشان داده شده است:

شما بیش از حد خرد می کنید

شکل 2. افکت اور اسکرول اندروید 12، همانطور که در تنظیمات نشان داده شده است

برای سازگاری برنامه‌نویس، مطمئن شوید که اثر کلی اسکرول روی دستگاه‌هایتان شبیه موارد زیر است:

  • در دستگاه‌هایی که برای 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 زیر را در نظر بگیرید:

    • با کشش overscroll، کاربران نباید با محتویات چیدمان در حال کشیده شدن آن تعامل داشته باشند. کاربران باید فقط خود کشش را دستکاری کنند و مثلاً نتوانند دکمه ای را در محتوا فشار دهند.

    • هنگامی که کاربران در حالی که انیمیشن EdgeEffect در حال انجام است، محتوا را لمس می‌کنند، باید انیمیشن را بگیرند و اجازه داشته باشند که کشش را دستکاری کنند. مقدار کشش فعلی از EdgeEffectCompat.getDistance() در دسترس است.

    • برای دستکاری مقدار کشش و برگرداندن مقدار مصرف شده، از onPullDistance() استفاده کنید. این به توسعه دهندگان این امکان را می دهد که به آرامی از حالت کشش به پیمایش عبور کنند زیرا انگشت محتوا را از موقعیت شروع خارج می کند.

    • هنگام کار با پیمایش تودرتو، اگر محتوا کشیده باشد، کشش باید حرکت لمسی را قبل از محتوای تودرتو مصرف کند، در غیر این صورت ممکن است زمانی که انگشت به جای رها کردن کشش تغییر جهت می‌دهد، تودرتو حرکت کند.

برای جزئیات بیشتر در مورد اسکرول، به حرکت حرکت حرکتی مراجعه کنید.

استفاده از ریپل (بازخورد لمسی) در سیستم عامل شما

اندروید 12 شامل یک موج لمسی نرم تر و ظریف تر برای ارائه بازخورد به کاربران در هنگام ضربه زدن است.

مواد شما ریپل

شکل 3. افکت ریپل اندروید 12، با انیمیشن پرکننده نرم تر

برای پیش‌بینی‌پذیری توسعه‌دهندگان و ارائه یک تجربه کاربری عالی، مطمئن شوید که افکت موج‌دار روی دستگاه‌های شما مشابه مثالی است که در بالا نشان داده شده است. در حالی که برای پشتیبانی از افکت های ریپل نیازی به انجام هیچ مرحله ادغام خاصی ندارید، باید این افکت را روی دستگاه های خود آزمایش کنید تا رگرسیون های ناخواسته ای را که در پیاده سازی شما معرفی شده اند بررسی کنید.

ابزارک ها

ویجت ها اجزای کلیدی یک دستگاه اندرویدی هستند. Android 12 شامل API ها و قابلیت های API جدیدی است که همه OEM ها باید از آن ها پشتیبانی کنند.

منابع اضافی

استفاده از رنگ SysUI

(لهجه 1 = A1، لهجه 2 = A2، لهجه 3 = A3، خنثی1 = N1، خنثی2 = N2)

موادی که استفاده می کنید

شکل 4. استفاده از رنگ پویا در رابط کاربری سیستم

به روز رسانی ویژگی رنگ کتابخانه مواد

متریال با ایجاد نقش‌های رنگی که برای ارائه رنگ به نماهای خاص استفاده می‌شود، ویژگی‌های موضوعی خود را در نسخه آینده به‌روزرسانی می‌کند.

نقش رنگ ویژگی تم اندروید تم سبک
رنگ پویا
تم تیره
رنگ پویا
اولیه رنگ اولیه system_accent1_600 system_accent1_200
در ابتدایی colorOnPrimary system_accent1_0 system_accent1_800
ثانویه رنگ ثانویه system_accent2_600 system_accent2_200
در ثانویه colorOnsecondary system_accent2_0 system_accent2_800
خطا رنگ خطا N/A (red_600) N/A (red_200)
در مورد خطا colorOnError غیر مجاز (سفید) N/A (red_900)
پس زمینه اندروید: پس زمینه رنگی system_neutral1_10 system_neutral1_900
در پس زمینه colorOnBackground system_neutral1_900 system_neutral1_100
سطح رنگ سطح system_neutral1_10 system_neutral1_900
روی سطح colorOnSurface system_neutral1_900 system_neutral1_100

مواد ویژگی های حالت خود را با نشانگرهای زیر به روز می کند:

نقش رنگ ویژگی تم اندروید تم سبک
رنگ پویا
تم تیره
رنگ پویا
محتوای حالت اولیه colorPrimaryStateContent system_accent1_700 system_accent1_200
لایه حالت اصلی colorPrimaryStateLayer system_accent1_600 system_accent1_300
محتوای حالت ثانویه colorSecondaryStateContent system_accent2_700 system_accent2_200
لایه حالت ثانویه colorSecondaryStateLayer system_accent2_600 system_accent2_300
در مورد محتوای حالت اولیه colorOnPrimaryStateContent system_accent1_0 system_accent1_800
روی لایه حالت اولیه colorOnPrimaryStateLayer system_accent1_900 system_accent1_800
در مورد محتوای حالت ثانویه colorOnSecondaryStateContent system_accent2_0 system_accent2_800
در لایه حالت ثانویه colorOnSecondaryStateLayer 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 system_neutral1_100
روی لایه حالت سطحی colorOnSurfaceStateLayer system_neutral1_900 system_neutral1_100
در محتوای حالت متغیر سطحی colorOnSurfaceVariantStateContent system_neutral2_700 system_neutral2_200
روی لایه حالت متغیر سطحی colorOnSurfaceVariantStateLayer system_neutral2_700 system_neutral2_200
حالت خطا در محتوای colorErrorStateContent red800 قرمز200

سوالات متداول

استخراج رنگ

هنگامی که کاربر یک تصویر زمینه را تغییر می دهد، آیا استخراج رنگ به طور خودکار انجام می شود یا باید از جایی فعال شود؟

با وصله های اندروید 12 ، استخراج رنگ کاغذ دیواری به طور پیش فرض روشن است.

ThemeOverlayController.java منطق را با ThemeOverlayController#mOnColorsChangedListener و WallpaperManager#onWallpaperColorsChanged راه‌اندازی می‌کند.

برای والپیپرهای زنده یا تصاویر پس زمینه ویدیویی ، آیا می‌توانیم بدانیم که استخراج رنگ چه زمانی رنگ را از صفحه نمایش می‌گیرد؟ برخی از کاربران ممکن است رنگ های آخرین فریم را بخواهند زیرا در بیشترین زمان نمایش داده می شود.

استخراج رنگ زمانی که کاربر کاغذدیواری را تنظیم می‌کند یا پس از چرخه برق صفحه (در پاسخ به WallpaperEngine#notifyColorsChanged ) فعال می‌شود. آخرین رویداد WallpaperColors (از تصویر زمینه زنده) پس از خاموش کردن صفحه توسط کاربر و روشن کردن مجدد آن اعمال می شود.

انتخابگر تم/کاغذ دیواری

چگونه انتخابگر طرح زمینه را فعال کنم تا چندین رنگ منبع را برای کاربران از رنگ با بالاترین فرکانس نشان دهد؟ آیا راهی برای بدست آوردن آن رنگ ها از منطق استخراج وجود دارد؟

بله در انتخابگر تم، می‌توانید از ColorScheme#getSeedColors(wallpaperColors: WallpaperColors) استفاده کنید.

یک ویژگی در نام پیکسل به عنوان نماد مضمون وجود دارد. آیا در سه وصله‌ای که به اشتراک گذاشته‌اید گنجانده شده است؟ چگونه OEM ها می توانند آن را پیاده سازی کنند؟

خیر. نمادهای مضمون در نسخه بتا هستند و در Android 12 در دسترس نیستند.

آیا راهی برای استفاده از برنامه Google Wallpaper با فعال کردن ویژگی‌های استخراج و انتخاب رنگ وجود دارد؟

بله این ویژگی‌ها را می‌توان در آخرین نسخه برنامه Google Wallpaper با دنبال کردن مراحل یکپارچه‌سازی که قبلاً در این صفحه توضیح داده شد، پیاده‌سازی کرد.

برای جزئیات بیشتر با TAM خود تماس بگیرید.

آیا Google می‌تواند برنامه یا کد منبع را به اشتراک بگذارد تا OEMها بتوانند نسخه خود از پیش‌نمایش رنگ پویا را در منوی تنظیمات خود، که شبیه به بخش پیش‌نمایش نشان‌داده‌شده در برنامه انتخابگر Wallpaper Google است، پیاده‌سازی کنند؟

کلاس های اصلی که پیش نمایش را ارائه می دهند WallpaperPicker2 و Launcher3 هستند.

صفحه پیش نمایش تصویر زمینه WallpaperSectionController است.

چگونه همانطور که در برنامه Google Wallpaper نشان داده شده است، پس از تغییر رنگ، پیش نمایش را پیاده سازی کنیم؟

برنامه انتخابگر Wallpaper انتظار دارد که یک ContentProvider از Launcher در دسترس باشد (راه‌اندازی مبتنی بر Launcher3 آن را دارد). پیش‌نمایش توسط GridCustomizationsProvider در Launcher ارائه شده است، که باید در متادیتای Activity اصلی Launcher به آن ارجاع داده شود تا تصویر زمینه و برنامه سبک آن را بخواند. همه اینها در Launcher3 AOSP پیاده سازی شده و برای OEM ها در دسترس است.

،

با شروع Android 12، Material You Design بر بیان و روان بودن در سیستم عامل اندروید تمرکز دارد، با هدف کمک به کاربران برای ایجاد و داشتن یک تجربه منسجم و منسجم مطابق با نیازهایشان. به‌عنوان یک شریک Android، تشویق می‌شوید که موادی را که طراحی می‌کنید در بخش‌های زیر در دستگاه‌های Android خود بگنجانید:

  • رنگ پویا
  • حرکت
  • ابزارک ها

رنگ پویا

رنگ پویا محور اصلی طراحی Material You است و بخش مهمی از استراتژی چند ساله اندروید برای ارائه سفارشی سازی ساده تر و عمیق تر به کاربرانش است، به گونه ای که دستگاه های دیگر انجام نمی دهند. موادی که شما ارائه می دهید:

  • کاربران و توسعه دهندگان یک داستان ثابت و غنی از شخصی سازی در هر دستگاه اندرویدی موجود است.

  • OEM های اندروید فرصت هایی را برای ادامه نوآوری رابط کاربری سیستم و برنامه های شخص اول به گونه ای که با رنگ، ساخت و شکل سخت افزار و برند آنها هماهنگ است، ادامه دهند.

برای استفاده از رنگ پویا، از داستان استخراج رنگ Android 12 Material You به عنوان بخش کلیدی نرم افزار خود به کاربران استفاده کنید. در دستگاه، از منطق استخراج رنگ که در AOSP است، استفاده کنید، به خصوص منطقی که یک تصویر زمینه یا رنگ منبع تم را می گیرد و آن را از طریق 65 API رنگی خروجی می دهد. برای نیازهای رنگ پویا، به استفاده از رنگ پویا مراجعه کنید.

جریان کامل رنگ پویا شامل چهار مرحله است که در زیر نشان داده شده است:

موادی که شما جریان رنگ می کنید

شکل 1. مواد شما جریان رنگ پویا

  1. کاربر تصویر زمینه یا تم را از طریق انتخابگر OEM تغییر می دهد.

  2. کاربر یکی از موارد زیر را انتخاب می کند:

    • تم دستگاه. پس از انتخاب، Android به طور خودکار یک رنگ منبع واحد را انتخاب می کند که شرایط را برآورده می کند.

    • والپیپر + تم جدید. پس از انتخاب، منطق AOSP به طور خودکار یک رنگ منبع واحد را از تصویر زمینه انتخاب شده انتخاب می کند.

  3. AOSP مطابق با منطق AOSP، رنگ منبع تک را به 5 پالت تونال با 13 رنگ تونال هر کدام گسترش می دهد، که سپس 65 ویژگی رنگ را پر می کند.

  4. رابط کاربری برنامه از 65 ویژگی رنگی استفاده می کند که در سراسر اکوسیستم برنامه اندروید یکسان است. تشویق می‌شوید از همان پالت رنگی برای رابط کاربری سیستم دستگاه و برنامه‌های خاص OEM استفاده کنید.

وصله های اندروید 12

برای دریافت منطق انتها به انتها برای استخراج رنگ کاغذدیواری و فعال کردن دستگاه برای پر کردن APIهای 65 رنگ به روشی که با اکوسیستم سازگار است، وصله‌های زیر را در اجرای Android 12 خود وارد کنید:

تعیین رنگ های سفارشی در ThemePicker

اگر از برنامه AOSP ThemePicker استفاده می‌کنید، برنامه WallpaperPicker بخش رنگ را در صورت وجود هر دو شرایط زیر نشان می‌دهد:

  • flag_monet در frameworks/base/packages/SystemUI/res/values/flags.xml true است.
  • یک 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_primary_ item و یک color_secondary_ item وجود داشته باشد (و هر دو رنگ باید یک رنگ باشند). مقادیر این ورودی های color کدهای رنگی واقعی برای هر رنگ است که در بخش اصلی رنگ نشان می دهد.

مرحله 1: ایجاد یک تجربه موضوعی کاربر

انتخاب کننده تم جایی است که کاربران با قابلیت های شخصی سازی جدید Material You درگیر می شوند و به طور بالقوه بین گزینه های رنگی یا از پیش تنظیم شده انتخاب می کنند. همانطور که با محصول و جمعیت کاربر شما مطابقت دارد، می توانید با استفاده از انتخابگر تم یا انتخابگر کاغذ دیواری، تجربه شخصی سازی و رنگی غنی تری را به کاربران ارائه دهید.

  • هنگام استفاده از انتخابگر کاغذ دیواری، استخراج رنگ کاغذ دیواری به طور پیش فرض روشن است. با این حال، می‌توانید برخی سفارشی‌سازی‌ها را برای انتخابگر انجام دهید تا گزینه‌های بیشتری را در اختیار کاربر قرار دهید.

مرحله 2: رنگ کاغذ دیواری را به رنگ منبع استخراج کنید

برای فعال کردن استخراج رنگ کاغذدیواری، وصله‌های Android 12 فهرست شده در بالا را انتخاب کنید (این عملکرد به‌طور پیش‌فرض در نسخه آینده AOSP فعال خواهد شد). منطق AOSP که استخراج کاغذدیواری را آغاز می‌کند، از frameworks/base/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java ، در ThemeOverlayController#mOnColorsChangedListener ، از طریق WallpaperManager#onWallpaperColorsChanged . توصیه می کنیم از منطق AOSP اصلاح نشده برای اطمینان از تجربه توسعه پایدار استفاده کنید.

به طور پیش فرض، منطق بالاترین فرکانس رنگی را که برای استفاده مناسب است انتخاب می کند. برای استفاده از دیگر رنگ‌های منبع بازگشتی توسط الگوریتم و ارائه آن رنگ‌ها به کاربران در انتخاب‌کننده تم، ColorScheme#getSeedColors(wallpaperColors: WallpaperColors) استفاده کنید.

برای اینکه برای استفاده مناسب باشد، یک رنگ منبع (چه از کاغذ دیواری استخراج شده باشد و چه از پیش تنظیم شده توسط کاربر) باید حداقل مقدار کروم CAM16 5 داشته باشد. این تضمین می‌کند که رنگ مبدأ تحت تأثیر رنگ‌های تیره ظریف قرار نمی‌گیرد، زمانی که از یک رنگ به رنگ 65 تنی تبدیل می‌شود و نماینده انتخاب کاربر باقی می‌ماند. برای خواندن و تغییر رنگ ها در CAM16، Cam#fromInt یا Cam#getInt استفاده کنید.

استفاده از پالت رنگ غیر پویا برای دستگاه‌هایی که از استخراج رنگ کاغذدیواری پشتیبانی نمی‌کنند، همچنان می‌توانید با انجام کارهای زیر مطمئن شوید که برنامه‌های Google و برنامه‌های شخص ثالثی که رنگ پویا را پشتیبانی می‌کنند عالی به نظر می‌رسند:

  • با غیرفعال کردن flag_monet در frameworks/base/packages/SystemUI/res/values/flags.xml از پالت Material پیش‌فرض استفاده کنید.
  • اطمینان حاصل کنید که کاربران همچنان می توانند سیستم عامل خود را با استفاده از انتخابگر تم از پیش تعیین شده شخصی سازی کنند.

مرحله 3: رنگ منبع را به APIهای رنگی گسترش دهید

با استفاده از رنگ منبع واحد مشتق شده از مرحله قبل، اندروید 5 پالت تونال منحصر به فرد (لهجه 1-3، خنثی 1-2)، هر پالت شامل 13 رنگ، و هر رنگ شامل مقادیر مختلف درخشندگی (0 تا 1000) را تولید می کند. در مجموع 65 رنگ منطق ارائه شده در وصله های اندروید 12 این گسترش رنگ را به درستی پیاده سازی می کند. جزئیات ارائه شده در زیر پیاده سازی را شرح می دهد.

برای سازگاری برنامه‌نویس، 5 پالت تونال (accent1، accent2، accent3، neutral1، neutral2) و 13 رنگ متناظر آن‌ها باید براساس رنگ منبع واحد با تغییرات مربوطه به مقادیر رنگی و رنگی CAM16 مطابق زیر نوشته شده باشند:

  • system_accent1

    • Chroma: از "40" برای انواع رنگ هایی که به 0 ، 10 ، 50 و 100 ختم می شوند، استفاده کنید، در غیر این صورت "48"
    • رنگ: همان منبع
  • system_accent2

    • Chroma: از "16" استفاده کنید
    • رنگ: همانند منبع
  • system_accent3

    • Chroma: از "32" استفاده کنید
    • رنگ: چرخش 60 درجه مثبت
  • system_neutral1

    • Chroma: از "4" استفاده کنید
    • رنگ: همانند منبع
  • system_neutral2

    • Chroma: از "8" استفاده کنید
    • رنگ: همانند منبع

CTS شامل تست‌هایی برای اعتبارسنجی فراخوان‌های API روشنایی و رنگ است. برای اجرا، از atest SystemPalette استفاده کنید.

مرحله 4: از رنگ های پویا در برنامه ها و رابط کاربری سیستم استفاده کنید

پس از تنظیم رنگ‌های پویا روی دستگاه، برنامه‌ها دستورالعمل‌های 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 خود اضافه کنید

ساخت برای اندروید 13 و بالاتر

با شروع Android 13، 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.

همانطور که در JSON در زیر نشان داده شده است، به Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES ارسال می‌شوند:

{
    "android.theme.customization.system_palette":"B1611C",
    "android.theme.customization.theme_style":"EXPRESSIVE"
}

ساخت برای اندروید 12 و پایین تر

هنگام استفاده از انتخابگر طرح زمینه سفارشی، دستگاه باید یک رنگ منبع معتبر را با ارائه یک فایل JSON در قالب زیر به Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES ارسال کند (که در آن 746BC1 یک نمونه رنگ منبع معتبر است):

{
      "android.theme.customization.system_palette":"746BC1",
      "android.theme.customization.accent_color":"746BC1"
}

با انجام این کار، استخراج رنگ کاغذ دیواری (مرحله 2) حذف می شود و مستقیماً رنگ منبع ارائه شده را به 65 ویژگی رنگی گسترش می دهد (مرحله 3).

مرحله 6: یک بلیط را بایگانی کنید

علاوه بر ادغام سیستم، شما باید یک بلیط ارسال کنید و نام تجاری خود را به ما اطلاع دهید ( Build.MANUFACTURER ). از آنجایی که اکثر برنامه‌های شخص ثالث از Material Components برای Android برای نشان دادن رنگ‌های پویا استفاده می‌کنند، ما از یک لیست مجاز کدگذاری شده برای تشخیص اینکه کدام دستگاه‌ها ویژگی پالت‌های رنگی پویا را ادغام کرده‌اند، استفاده می‌کنیم.

حرکت

حرکت سیال باعث می شود دستگاه ها احساس مدرن و ممتازی داشته باشند. برای ایجاد و حفظ اعتماد و خوشحالی توسعه‌دهندگان، Overscroll و Ripple دو بخش کلیدی حرکت سیال هستند که نیاز به ظاهر و احساس سازگاری دارند.

استفاده از overscroll در سیستم عامل

اندروید 12 شامل یک حرکت پیمایشی پویاتر و پاسخگوتر به شکل کشش دید است که زمانی که کاربر سعی می کند از لبه لیست عبور کند نشان داده می شود. یک مثال در زیر نشان داده شده است:

موادی که شما Overscroll می کنید

شکل 2. افکت اور اسکرول اندروید 12، همانطور که در تنظیمات نشان داده شده است

برای سازگاری برنامه‌نویس، مطمئن شوید که اثر کلی اسکرول روی دستگاه‌هایتان شبیه موارد زیر است:

  • در دستگاه‌هایی که برای 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 زیر را در نظر بگیرید:

    • با کشش overscroll، کاربران نباید با محتویات چیدمان در حال کشیده شدن آن تعامل داشته باشند. کاربران باید فقط خود کشش را دستکاری کنند و مثلاً نتوانند دکمه ای را در محتوا فشار دهند.

    • هنگامی که کاربران در حالی که انیمیشن EdgeEffect در حال انجام است، محتوا را لمس می‌کنند، باید انیمیشن را بگیرند و اجازه داشته باشند که کشش را دستکاری کنند. مقدار کشش فعلی از EdgeEffectCompat.getDistance() در دسترس است.

    • برای دستکاری مقدار کشش و برگرداندن مقدار مصرف شده، از onPullDistance() استفاده کنید. این به توسعه دهندگان این امکان را می دهد که به آرامی از حالت کشش به پیمایش عبور کنند زیرا انگشت محتوا را از موقعیت شروع خارج می کند.

    • هنگام کار با پیمایش تودرتو، اگر محتوا کشیده باشد، کشش باید حرکت لمسی را قبل از محتوای تودرتو مصرف کند، در غیر این صورت ممکن است زمانی که انگشت به جای رها کردن کشش تغییر جهت می‌دهد، تودرتو حرکت کند.

برای جزئیات بیشتر در مورد اسکرول، به حرکت حرکت حرکتی مراجعه کنید.

استفاده از ریپل (بازخورد لمسی) در سیستم عامل شما

اندروید 12 شامل یک موج لمسی نرم تر و ظریف تر برای ارائه بازخورد به کاربران در هنگام ضربه زدن است.

مواد شما ریپل

شکل 3. افکت ریپل اندروید 12، با انیمیشن پرکننده نرم تر

برای پیش بینی توسعه دهنده و ارائه یک تجربه کاربری عالی ، اطمینان حاصل کنید که اثر موج دار بر روی دستگاه های شما مشابه به عنوان نمونه ای است که در بالا نشان داده شده است. در حالی که نیازی به انجام هر مرحله خاص ادغام برای پشتیبانی از اثرات موج دار نیست ، باید تأثیر آن را بر روی دستگاه های خود آزمایش کنید تا هرگونه رگرسیون ناخواسته معرفی شده در اجرای خود را بررسی کنید.

ابزارک ها

ابزارک ها اجزای اصلی یک دستگاه اندرویدی هستند. Android 12 شامل قابلیت های جدید API و API است که همه OEM ها باید از آنها پشتیبانی کنند.

منابع اضافی

استفاده از رنگ sysui

.

موادی که از آن استفاده می کنید

شکل 4. استفاده از رنگ پویا در UI سیستم

به روزرسانی ویژگی های رنگ کتابخانه مادی

با ایجاد نقشهای رنگی که برای تهیه رنگ به نماهای خاص استفاده می شود ، مواد در نسخه آینده به روز می شوند.

نقش رنگ ویژگی تم اندرویدی تم سبک
رنگ پویا
تم تیره
رنگ پویا
اولیه رنگ اولیه system_accent1_600 system_accent1_200
در ابتدایی رنگارنگ system_accent1_0 system_accent1_800
ثانویه رنگ system_accent2_600 system_accent2_200
ثانویه رنگ system_accent2_0 system_accent2_800
خطا رنگ خطا N/A (red_600) n/a (red_200)
در مورد خطا رنگارنگ n/a (سفید) N/A (red_900)
پس زمینه Android: Colorbackground System_Neutral1_10 System_Neutral1_900
در پس زمینه زمین System_Neutral1_900 system_neutral1_100
سطح رنگ System_Neutral1_10 System_Neutral1_900
روی سطح سطح رنگ System_Neutral1_900 system_neutral1_100

مطالب با نشانگرهای زیر ویژگی های ایالات خود را به روز می کنند:

نقش رنگ ویژگی تم اندرویدی تم سبک
رنگ پویا
تم تیره
رنگ پویا
محتوای حالت اصلی ColorPrimarystateContent system_accent1_700 system_accent1_200
لایه حالت اصلی کورسن system_accent1_600 system_accent1_300
محتوای حالت ثانویه ColorSecondaryStateContent system_accent2_700 system_accent2_200
لایه حالت ثانویه Colorsecondarystatelayer system_accent2_600 system_accent2_300
در محتوای حالت اولیه ColorOnprimaryStateContent system_accent1_0 system_accent1_800
در لایه حالت اولیه ColorOnprimarystatelayer system_accent1_900 system_accent1_800
در محتوای حالت ثانویه ColoronsecondarystateContent system_accent2_0 system_accent2_800
در لایه حالت ثانویه Coloronsecondarystatelayer system_accent2_900 system_accent2_800
در مورد محتوای حالت کانتینر اولیه coloronprimarycontainerstatatentent system_accent1_900 system_accent1_900
در لایه حالت کانتینر اولیه ColorOnprimaryContAinstateLayer system_accent1_900 system_accent1_900
در محتوای حالت کانتینر ثانویه coloronsecondarycontainerstatateContent system_accent2_900 system_accent2_900
روی لایه حالت کانتینر ثانویه ColoronsecondaryContainerSteLayer system_accent2_900 system_accent2_900
در محتوای حالت کانتینر سوم ColorOntertiaryContainerStateContent system_accent3_900 system_accent3_900
در لایه حالت کانتینر سوم ColorOntertiaryContainerSteLayer system_accent3_900 system_accent3_900
روی محتوای حالت سطح ColoronsurfacestateContent System_Neutral1_900 system_neutral1_100
روی لایه حالت سطح Coloronsurfacestatelayer System_Neutral1_900 system_neutral1_100
روی محتوای حالت متفاوت سطح ColorOnsurfaceVarianTstateContent System_Neutral2_700 System_Neutral2_200
روی لایه حالت نوع سطح ColorOnsurfaceVarianTstatElayer System_Neutral2_700 System_Neutral2_200
محتوای حالت خطا رنگرزی قرمز 800 Red200

سوالات متداول

استخراج رنگ

هنگامی که کاربر یک تصویر زمینه را تغییر می دهد ، آیا استخراج رنگ به طور خودکار انجام می شود یا نیاز به ایجاد جایی از جایی دارد؟

با استفاده از تکه های Android 12 ، استخراج رنگ کاغذ دیواری به طور پیش فرض روشن است.

ThemeOverlayController.java منطق را با ThemeOverlayController#mOnColorsChangedListener و WallpaperManager#onWallpaperColorsChanged ایجاد می کند.

برای تصاویر پس زمینه زنده یا تصاویر پس زمینه ویدیویی ، آیا می توانیم بدانیم وقتی استخراج رنگ رنگ را از صفحه می گیرد؟ برخی از کاربران ممکن است رنگ های آخرین قاب را بخواهند زیرا در بیشتر زمان نشان داده می شود.

استخراج رنگ زمانی ایجاد می شود که کاربر کاغذ دیواری یا بعد از چرخه قدرت صفحه نمایش را تنظیم کند (در پاسخ به WallpaperEngine#notifyColorsChanged ). آخرین رویداد WallpaperColors (از تصویر زمینه زنده) پس از خاموش کردن کاربر صفحه نمایش داده می شود و دوباره آن را روشن می کند.

تم/تصویرگر کاغذ دیواری

چگونه می توانم انتخاب کننده تم را برای انتخاب رنگهای مختلف برای کاربران نسبت به بالاترین رنگ فرکانس نشان دهم؟ آیا راهی وجود دارد که آن رنگ ها را از منطق استخراج بدست آورید؟

بله در انتخاب کننده تم خود ، می توانید از ColorScheme#getSeedColors(wallpaperColors: WallpaperColors) استفاده کنید.

یک ویژگی در نامهای پیکسل به عنوان نماد مضمون وجود دارد. آیا در سه تکه ای که به اشتراک گذاشته اید گنجانده شده است؟ چگونه OEM ها می توانند آن را پیاده سازی کنند؟

شماره آیکون های مضمون در بتا قرار دارند و در Android 12 در دسترس نیستند.

آیا راهی برای استفاده از برنامه Wallpaper Google با استخراج رنگ و ویژگی های انتخاب فعال وجود دارد؟

بله این ویژگی ها را می توان در آخرین نسخه برنامه Wallpaper Google با دنبال کردن مراحل ادغام توضیح داده شده در این صفحه اجرا کرد.

برای اطلاعات بیشتر به TAM خود دسترسی پیدا کنید.

آیا Google می تواند برنامه یا کد منبع را به اشتراک بگذارد تا OEM ها بتوانند نسخه خود را از پیش نمایش رنگ پویا در منوی تنظیمات خود اجرا کنند ، که به نظر می رسد شبیه به بخش پیش نمایش نشان داده شده در برنامه انتخابی تصویر زمینه Google است؟

کلاسهای اصلی که پیش نمایش را ارائه می دهند WallpaperPicker2 و Launcher3 هستند.

صفحه پیش نمایش تصویر زمینه WallpaperSectionController است.

چگونه می توان پیش نمایش را پس از تغییر رنگ ، همانطور که در برنامه Wallpaper Google نشان داده شده است ، پیاده سازی کنید؟

برنامه Wallpaper Picker انتظار دارد که یک ContentProvider از Launcher در دسترس باشد (یک پرتابگر Launcher3 دارای آن است). پیش نمایش توسط GridCustomizationsProvider در Launcher ارائه شده است ، که باید در ابرداده اصلی فعالیت Launcher برای تهیه تصویر زمینه و برنامه سبک به آن اشاره شود. همه این موارد در Launcher3 AOSP اجرا شده و در دسترس OEM ها است.