অ্যান্ড্রয়েড ১২ থেকে শুরু করে, ম্যাটেরিয়াল ইউ ডিজাইন অ্যান্ড্রয়েড ওএস-এ অভিব্যক্তি এবং সাবলীলতার উপর মনোযোগ দেয়, যার লক্ষ্য হলো ব্যবহারকারীদের তাদের প্রয়োজন অনুসারে একটি একক, সুসংহত অভিজ্ঞতা তৈরি করতে এবং তার মালিকানা লাভ করতে সাহায্য করা। একজন অ্যান্ড্রয়েড পার্টনার হিসেবে, আপনাকে আপনার অ্যান্ড্রয়েড ডিভাইসগুলিতে নিম্নলিখিত ক্ষেত্রগুলিতে ম্যাটেরিয়াল ইউ ডিজাইন অন্তর্ভুক্ত করতে উৎসাহিত করা হচ্ছে:
- গতিশীল রঙ
- গতি
- উইজেট
গতিশীল রঙ
ডাইনামিক কালার হলো ম্যাটেরিয়াল ইউ ডিজাইনের মূল কেন্দ্রবিন্দু এবং অ্যান্ড্রয়েডের বহু বছরের কৌশলের একটি গুরুত্বপূর্ণ অংশ, যার লক্ষ্য হলো এর ব্যবহারকারীদের জন্য এমনভাবে সহজতর ও গভীর কাস্টমাইজেশনের সুযোগ নিয়ে আসা যা অন্য কোনো ডিভাইস করে না। ম্যাটেরিয়াল ইউ যা যা অফার করে:
ব্যবহারকারী এবং ডেভেলপারদের জন্য যেকোনো অ্যান্ড্রয়েড ডিভাইসে উপলব্ধ ব্যক্তিগতকরণের একটি সামঞ্জস্যপূর্ণ ও সমৃদ্ধ অভিজ্ঞতা।
অ্যান্ড্রয়েড ওইএম-দের জন্য তাদের হার্ডওয়্যার এবং ব্র্যান্ডের বৈশিষ্ট্য, গঠন ও রূপের সাথে সামঞ্জস্য রেখে সিস্টেম ইউআই এবং ফার্স্ট-পার্টি অ্যাপে উদ্ভাবন চালিয়ে যাওয়ার সুযোগ রয়েছে।
ডাইনামিক কালারের সুবিধা নিতে, ব্যবহারকারীদের কাছে আপনার সফটওয়্যার উপস্থাপনের একটি মূল অংশ হিসেবে অ্যান্ড্রয়েড ১২ ম্যাটেরিয়াল ইউ কালার এক্সট্র্যাকশন স্টোরি ব্যবহার করুন। ডিভাইসে, AOSP-তে থাকা কালার এক্সট্র্যাকশন লজিকটি ব্যবহার করুন, বিশেষ করে সেই লজিকটি যা একটিমাত্র ওয়ালপেপার বা থিমের সোর্স কালার গ্রহণ করে এবং ৬৫টি কালার এপিআই-এর মাধ্যমে তা আউটপুট করে। ডাইনামিক কালারের প্রয়োজনীয়তা জানতে, “ইউজিং ডাইনামিক কালার” দেখুন।
সম্পূর্ণ ডাইনামিক কালার ফ্লো-তে চারটি ধাপ রয়েছে, যা নিচে চিত্রিত করা হলো:

চিত্র ১. উপাদান আপনার গতিশীল রঙের প্রবাহ
ব্যবহারকারী OEM পিকারের মাধ্যমে ওয়ালপেপার বা থিম পরিবর্তন করেন।
ব্যবহারকারী নিম্নলিখিত বিকল্পগুলির মধ্যে একটি নির্বাচন করেন:
ডিভাইস থিম। এটি নির্বাচন করা হলে, অ্যান্ড্রয়েড স্বয়ংক্রিয়ভাবে প্রয়োজনীয়তা পূরণ করে এমন একটি একক উৎস রঙ বেছে নেয়।
নতুন ওয়ালপেপার ও থিম। এটি নির্বাচন করা হলে, AOSP লজিক স্বয়ংক্রিয়ভাবে নির্বাচিত ওয়ালপেপার থেকে একটি একক উৎস রঙ বেছে নেয়।
AOSP তার নিজস্ব যুক্তি অনুসারে, একক উৎস রঙকে ৫টি টোনাল প্যালেটে প্রসারিত করে, যার প্রতিটিতে ১৩টি করে টোনাল রঙের ভ্যারিয়েন্ট থাকে, এবং এই ভ্যারিয়েন্টগুলো ৬৫টি রঙের অ্যাট্রিবিউটে যুক্ত হয়।
অ্যাপের UI-টি অ্যান্ড্রয়েড অ্যাপ ইকোসিস্টেম জুড়ে সামঞ্জস্যপূর্ণভাবে ৬৫টি রঙের বৈশিষ্ট্য ব্যবহার করে। আপনাকে ডিভাইসের সিস্টেম UI এবং OEM-নির্দিষ্ট অ্যাপগুলোর জন্য একই কালার প্যালেট ব্যবহার করতে উৎসাহিত করা হচ্ছে।
অ্যান্ড্রয়েড ১২ প্যাচ
ওয়ালপেপারের রঙ নিষ্কাশনের এন্ড-টু-এন্ড লজিক পেতে এবং ইকোসিস্টেমের সাথে সামঞ্জস্যপূর্ণ উপায়ে ডিভাইসটিকে ৬৫-রঙের এপিআই পূরণ করতে সক্ষম করার জন্য, আপনার অ্যান্ড্রয়েড ১২ ইমপ্লিমেন্টেশনে নিম্নলিখিত প্যাচগুলি অন্তর্ভুক্ত করুন:
বাধ্যতামূলক
জোরালোভাবে সুপারিশ করা হচ্ছে
- বুট কালার সিসপ্রপস সেট করার সময় রেস কন্ডিশন ঠিক করুন।
- থিম পরিবর্তনের বিষয়ে ওভারলেগুলিকে অবহিত করার অনুমতি দিন।
- সিস্টেম প্রপস-এ বুট কালার সেট করার সময় রেস কন্ডিশন সমাধান (দ্বিতীয় পর্ব)
- FeatureFlags-কে flags প্যাকেজে স্থানান্তর করুন।
- একাধিক ব্যবহারকারী থিমিং সমর্থন সঠিকভাবে বাস্তবায়ন করুন
- রিবুট করার পর নির্দিষ্ট ওয়ালপেপার রঙের অপশনটি অনুপস্থিত থাকলে তা ঠিক করুন।
- টারশিয়ারি হিউ গণনার ত্রুটি সংশোধন করুন
- ব্যাকগ্রাউন্ড অ্যাপগুলোকে থিম পরিবর্তন করতে দেবেন না।
থিমপিকারে কাস্টম রং নির্দিষ্ট করা
আপনি যদি AOSP ThemePicker অ্যাপটি ব্যবহার করেন, তাহলে নিম্নলিখিত উভয় শর্ত পূরণ হলে WallpaperPicker অ্যাপটি রঙের বিভাগটি দেখাবে:
-
frameworks/base/packages/SystemUI/res/values/flags.xmlএflag_monetএর মানtrue। -
packages/apps/ThemePicker/res/values/override.xmlফাইলেরthemes_stub_packageএ নির্দিষ্ট প্যাকেজ নামের একটি সিস্টেম স্টাব APK সংজ্ঞায়িত করা আছে।
স্টাব এপিকে ফরম্যাট
এই APK-টির একটি নমুনা সংস্করণ packages/apps/ThemePicker/themes এ পাওয়া যাবে।
এই APK-টিতে শুধুমাত্র রিসোর্স থাকা উচিত, যেখানে উপলব্ধ মৌলিক রঙ এবং তাদের নাম বিস্তারিতভাবে উল্লেখ থাকবে।
স্টাবটিতে res/xml অধীনে নিম্নলিখিত ফরম্যাটে একটি 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>
এই ফাইলে, color_bundles অন্তর্ভুক্ত প্রতিটি item একটি স্বতন্ত্র নাম থাকে, তবে শর্ত হলো নিচের স্ট্রিংগুলোর নাম 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 এন্ট্রিগুলির মান হলো বেসিক কালার বিভাগে প্রদর্শিত প্রতিটি রঙের প্রকৃত কালার কোড।
ধাপ ১: ব্যবহারকারীর জন্য একটি থিমিং অভিজ্ঞতা তৈরি করুন
থিম পিকার হলো এমন একটি জায়গা যেখানে ব্যবহারকারীরা নতুন 'মেটেরিয়াল ইউ' পার্সোনালাইজেশন সুবিধাগুলো ব্যবহার করতে পারেন এবং বিভিন্ন রঙের বিকল্প বা প্রিসেট থেকে বেছে নিতে পারেন। আপনার পণ্য এবং ব্যবহারকারী গোষ্ঠীর প্রয়োজন অনুসারে, আপনি একটি থিম পিকার বা ওয়ালপেপার পিকার ব্যবহারের মাধ্যমে ব্যবহারকারীদের আরও সমৃদ্ধ পার্সোনালাইজেশন এবং রঙের অভিজ্ঞতা দিতে পারেন।
- ওয়ালপেপার পিকার ব্যবহার করার সময়, ওয়ালপেপারের রঙ নির্বাচন করার সুবিধাটি ডিফল্টরূপে চালু থাকে। তবে, ব্যবহারকারীকে আরও বিকল্প দেওয়ার জন্য আপনি পিকারটিতে কিছু পরিবর্তন আনতে পারেন।
ধাপ ২: ওয়ালপেপারের রঙকে একটি উৎস রঙে রূপান্তর করুন।
ওয়ালপেপার কালার এক্সট্র্যাকশন সক্রিয় করতে, উপরে তালিকাভুক্ত অ্যান্ড্রয়েড ১২ প্যাচগুলো চেরিপিক করুন (এই কার্যকারিতাটি ভবিষ্যতের কোনো 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 ব্যবহার করুন।
যেসব ডিভাইস ওয়ালপেপার কালার এক্সট্র্যাকশন সাপোর্ট করে না, সেগুলোতে ডাইনামিক কালার সাপোর্ট করে এমন গুগল অ্যাপস এবং থার্ড-পার্টি অ্যাপস যাতে দেখতে চমৎকার লাগে, তা নিশ্চিত করতে আপনি নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করতে পারেন:
frameworks/base/packages/SystemUI/res/values/flags.xmlফাইলেflag_monetনিষ্ক্রিয় করে ডিফল্ট ম্যাটেরিয়াল প্যালেট ব্যবহার করুন।- পূর্বনির্ধারিত থিম পিকার ব্যবহার করে ব্যবহারকারীরা যাতে তাদের ওএস নিজেদের পছন্দ মতো সাজিয়ে নিতে পারেন, তা নিশ্চিত করুন।
ধাপ ৩: উৎস রঙকে কালার এপিআই-তে প্রসারিত করুন
পূর্ববর্তী ধাপ থেকে প্রাপ্ত একক উৎস রঙটি ব্যবহার করে, অ্যান্ড্রয়েড ৫টি স্বতন্ত্র টোনাল প্যালেট (অ্যাকসেন্ট ১-৩, নিউট্রাল ১-২) তৈরি করে, যার প্রতিটি প্যালেটে ১৩টি করে রঙ থাকে এবং প্রতিটি রঙের ভিন্ন ভিন্ন লুমিন্যান্স মান (০ থেকে ১০০০) থাকে, ফলে মোট রঙের সংখ্যা দাঁড়ায় ৬৫টি। অ্যান্ড্রয়েড ১২ প্যাচগুলিতে প্রদত্ত লজিক এই রঙের সম্প্রসারণটি সঠিকভাবে প্রয়োগ করে; নিচে প্রদত্ত বিবরণে এর বাস্তবায়ন বর্ণনা করা হয়েছে।
ডেভেলপারদের মধ্যে সামঞ্জস্যতা বজায় রাখার জন্য, ৫টি টোনাল প্যালেট (অ্যাকসেন্ট১, অ্যাকসেন্ট২, অ্যাকসেন্ট৩, নিউট্রাল১, নিউট্রাল২) এবং তাদের সংশ্লিষ্ট ১৩টি রঙ অবশ্যই একটিমাত্র উৎস রঙের উপর ভিত্তি করে তৈরি হতে হবে এবং এক্ষেত্রে CAM16 ক্রোমা ও হিউ মানের যথাযথ পরিবর্তন নিচে লেখা অনুযায়ী করতে হবে:
- ক্রোমা: "16" ব্যবহার করুন
- রঙ: উৎসের মতোই
- ক্রোমা: "32" ব্যবহার করুন
- রঙ: ৬০ ডিগ্রী ধনাত্মক দিকে ঘোরান
- ক্রোমা: "4" ব্যবহার করুন
- রঙ: উৎসের মতোই
- ক্রোমা: "8" ব্যবহার করুন
- রঙ: উৎসের মতোই
CTS-এ লুমিন্যান্স এবং হিউ এপিআই কলগুলো যাচাই করার জন্য পরীক্ষা অন্তর্ভুক্ত রয়েছে। এটি চালানোর জন্য, atest SystemPalette ব্যবহার করুন।
ধাপ ৪: অ্যাপ এবং সিস্টেম UI-তে ডাইনামিক কালার ব্যবহার করুন
ডিভাইসে ডাইনামিক কালার সেট করার পর, অ্যাপগুলো সেই রঙগুলো ব্যবহার করার জন্য ম্যাটেরিয়াল গাইডলাইন অনুসরণ করে। থার্ড-পার্টি অ্যাপগুলোর ব্যবহারের জন্য ম্যাটেরিয়াল গাইডলাইনগুলো ২০২১ সালের ২৬শে অক্টোবরের মধ্যে material.io- তে প্রকাশ হওয়ার কথা রয়েছে। সিস্টেম UI এবং ফার্স্ট-পার্টি অ্যাপগুলোর জন্য, আমরা জোরালোভাবে সুপারিশ করছি যেন আপনারা ইউজার এক্সপেরিয়েন্সের সর্বত্র ডাইনামিক কালার এমনভাবে ইন্টিগ্রেট করেন যা আপনাদের হার্ডওয়্যার ও ব্র্যান্ডের সাথে মানানসই হয় এবং আপনাদের ডিভাইসগুলোকে অন্যদের থেকে আলাদা করতে সাহায্য করে।
সাধারণ ডাইনামিক কালার নির্দেশনার জন্য নিম্নলিখিতগুলি দেখুন:
অ্যাপ এবং সিস্টেম UI-এর ফোরগ্রাউন্ড এলিমেন্টগুলোতে অ্যাকসেন্ট কালার ব্যবহার করুন:
@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অ্যাপ এবং সিস্টেম UI-এর ব্যাকগ্রাউন্ড উপাদানগুলিতে নিরপেক্ষ রং ব্যবহার করুন:
@android:color/system_neutral1_0 … 1000 // most-used background color group @android:color/system_neutral2_0 … 1000 // used for higher-elevation surfaces
Material You কীভাবে রঙ ম্যাপ করে এবং SysUI-তে API কীভাবে ব্যবহৃত হয় সে সম্পর্কে আরও তথ্যের জন্য, অতিরিক্ত রিসোর্স দেখুন।
ধাপ ৫: আপনার 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 ফাইল প্রদান করে Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES এ একটি বৈধ সোর্স কালার পাঠাতে হবে (যেখানে 746BC1 হলো একটি বৈধ সোর্স কালারের উদাহরণ):
{
"android.theme.customization.system_palette":"746BC1",
"android.theme.customization.accent_color":"746BC1"
}
এটি করলে ওয়ালপেপারের রঙ নিষ্কাশন (ধাপ ২) বাদ পড়ে যায় এবং প্রদত্ত উৎস রঙটি সরাসরি ৬৫টি রঙের বৈশিষ্ট্যে (ধাপ ৩) প্রসারিত হয়।
ধাপ ৬: একটি টিকিট ফাইল করুন
সিস্টেম ইন্টিগ্রেশন ছাড়াও, আপনাকে একটি টিকেট ফাইল করতে হবে এবং আপনার ব্র্যান্ডের নাম ( Build.MANUFACTURER ) আমাদের জানাতে হবে। যেহেতু বেশিরভাগ থার্ড-পার্টি অ্যাপ ডাইনামিক কালার দেখানোর জন্য অ্যান্ড্রয়েডের ম্যাটেরিয়াল কম্পোনেন্ট ব্যবহার করে, তাই কোন কোন ডিভাইসে ডাইনামিক কালার টোনাল প্যালেট ফিচারটি ইন্টিগ্রেট করা হয়েছে তা জানানোর জন্য আমরা একটি হার্ডকোডেড অ্যালাওলিস্ট ব্যবহার করছি।
গতি
ফ্লুইড মোশন ডিভাইসগুলোকে আধুনিক ও প্রিমিয়াম অনুভূতি দেয়। ডেভেলপারদের আস্থা ও সন্তুষ্টি অর্জন এবং বজায় রাখার জন্য, ওভারস্ক্রোল এবং রিপল হলো ফ্লুইড মোশনের দুটি মূল অংশ, যেগুলোর চেহারা ও অনুভূতি সামঞ্জস্যপূর্ণ হওয়া প্রয়োজন।
আপনার OS-এ ওভারস্ক্রোল ব্যবহার করা
অ্যান্ড্রয়েড ১২-এ একটি আরও বেশি রেসপন্সিভ ও ডাইনামিক ওভারস্ক্রোল মোশন যুক্ত করা হয়েছে, যা ভিউ স্ট্রেচ নামে পরিচিত এবং ব্যবহারকারী যখন কোনো তালিকার প্রান্ত অতিক্রম করে স্ক্রোল করার চেষ্টা করেন তখন এটি প্রদর্শিত হয়। নিচে এর একটি উদাহরণ দেখানো হলো:

চিত্র ২. অ্যান্ড্রয়েড ১২-এর ওভারস্ক্রোল এফেক্ট, যা সেটিংসে দেখানো হয়েছে।
ডেভেলপারদের জন্য সামঞ্জস্যতা বজায় রাখতে, নিশ্চিত করুন যে আপনার ডিভাইসগুলিতে সামগ্রিক ওভারস্ক্রোল এফেক্টটি নিম্নলিখিতগুলির অনুরূপ হয়:
যেসব ডিভাইসে
ActivityManager.isHighEndGfx()এর মান true হয়, সেগুলোতে ওভারস্ক্রোল ইফেক্টটি হলো স্ক্রিনের একটি নন-লিনিয়ার প্রসারণ (যেমনটি উপরে দেখানো হয়েছে)।কম কর্মক্ষমতা সম্পন্ন ডিভাইসগুলিতে, সিস্টেমের উপর চাপ কমানোর জন্য প্রসারণ প্রভাবকে একটি রৈখিক প্রসারণে সরলীকরণ করা হয়।
ফার্স্ট-পার্টি অ্যাপে ওভারস্ক্রোল ব্যবহার করা
কাস্টম ভিউ ব্যবহার করার সময়, স্ট্রেচ ইফেক্ট ব্যবহার করে এমন কিছু অ্যাপ এবং সিস্টেম UI-তে আপনার পরিবর্তন আনার প্রয়োজন হতে পারে।
স্ট্রেচ ওভারস্ক্রোল সমর্থন করার জন্য, সর্বশেষ লাইব্রেরিগুলিতে আপগ্রেড করুন:
-
RecyclerViewএর জন্যandroidx.recyclerview:recyclerview:1.3.0-alpha01 -
NestedScrollViewএবংEdgeEffectCompatএর জন্যandroidx.core:core:1.7.0-alpha01 -
ViewPagerজন্যandroidx.viewpager:viewpager:1.1-alpha01
-
EdgeEffectব্যবহার করে এমন কাস্টম লেআউটগুলির জন্য, নিম্নলিখিত UX পরিবর্তনগুলি বিবেচনা করুন:স্ট্রেচ ওভারস্ক্রোল চালু থাকলে, লেআউটটি প্রসারিত হওয়ার সময় ব্যবহারকারীদের এর ভেতরের বিষয়বস্তুর সাথে ইন্টারঅ্যাক্ট করা উচিত নয়। ব্যবহারকারীরা শুধুমাত্র প্রসারিত অংশটিকেই নিয়ন্ত্রণ করতে পারবে এবং, উদাহরণস্বরূপ, ভেতরের কোনো বাটন চাপতে পারবে না।
EdgeEffectঅ্যানিমেশন চলাকালীন ব্যবহারকারীরা যখন কন্টেন্টটি স্পর্শ করেন, তখন তাদের অ্যানিমেশনটি গ্রহণ করার এবং এর প্রসারণ নিয়ন্ত্রণ করার সুযোগ দেওয়া উচিত। বর্তমান টানার মানEdgeEffectCompat.getDistance()থেকে পাওয়া যায়।পুল ভ্যালু পরিবর্তন করতে এবং ব্যবহৃত পরিমাণ ফেরত পেতে,
onPullDistance()ব্যবহার করুন। এর ফলে, আঙুল যখন কন্টেন্টকে তার শুরুর অবস্থান অতিক্রম করে প্রসারিত করে, তখন ডেভেলপাররা স্ট্রেচিং থেকে স্ক্রলিং-এ মসৃণভাবে রূপান্তর করতে পারেন।নেস্টেড স্ক্রলিং নিয়ে কাজ করার সময়, যদি কন্টেন্ট প্রসারিত করা হয়, তবে সেই প্রসারণটি নেস্টেড কন্টেন্টের আগে টাচ মোশনকে গ্রহণ করবে, নতুবা আঙুল দিক পরিবর্তন করলে প্রসারণটি ছেড়ে দেওয়ার পরিবর্তে নেস্টিং স্ক্রল হয়ে যেতে পারে।
ওভারস্ক্রোল সম্পর্কে বিস্তারিত জানতে, "অ্যানিমেট এ স্ক্রোল জেসচার" দেখুন।
আপনার OS-এ রিপল (টাচ ফিডব্যাক) ব্যবহার করা
অ্যান্ড্রয়েড ১২-এ একটি আরও নরম ও সূক্ষ্ম টাচ রিপল যুক্ত করা হয়েছে, যা ট্যাপ করলে ব্যবহারকারীকে প্রতিক্রিয়া জানায়।

চিত্র ৩. অ্যান্ড্রয়েড ১২-এর রিপল এফেক্ট, একটি মৃদু ফিল অ্যানিমেশন সহ।
ডেভেলপারদের জন্য বিষয়টি অনুমানযোগ্য রাখতে এবং ব্যবহারকারীদের একটি চমৎকার অভিজ্ঞতা দেওয়ার জন্য, নিশ্চিত করুন যে আপনার ডিভাইসগুলিতে এর প্রভাব উপরে দেখানো উদাহরণের মতোই হয়। যদিও রিপল এফেক্ট সমর্থন করার জন্য আপনাকে কোনো নির্দিষ্ট ইন্টিগ্রেশন ধাপ অনুসরণ করতে হবে না, তবুও আপনার বাস্তবায়নে কোনো অনাকাঙ্ক্ষিত রিগ্রেশন তৈরি হচ্ছে কিনা তা পরীক্ষা করার জন্য আপনার ডিভাইসগুলিতে এর প্রভাব যাচাই করে দেখা উচিত।
উইজেট
উইজেট হলো একটি অ্যান্ড্রয়েড ডিভাইসের মূল উপাদান। অ্যান্ড্রয়েড ১২-এ নতুন এপিআই এবং এপিআই সক্ষমতা অন্তর্ভুক্ত করা হয়েছে, যা সকল ওইএম-এর সমর্থন করা উচিত।
আপনার অপারেটিং সিস্টেমে উইজেট লেআউট, সাইজিং এবং সফটওয়্যার প্যারামিটার (যেমন, গোলাকার কোণার আকার) সম্পর্কিত ডেভেলপার এপিআই সমর্থন করুন। আপনার বাস্তবায়নে এপিআই-এর মাধ্যমে প্যারামিটার সরবরাহ করার ক্ষেত্রে উইজেটগুলোকে সঠিকভাবে সমর্থন করতে হবে এবং এটিও নিশ্চিত করতে হবে যে উইজেটগুলো ব্যবহারকারীর দ্বারা আকার পরিবর্তনযোগ্য ও কনফিগারযোগ্য।
আপনার অ্যাপগুলিতে, যেখানে সম্ভব, নতুন ফার্স্ট-পার্টি উইজেট আপডেট করতে বা তৈরি করতে নতুন API সক্ষমতাগুলির সুবিধা নিন। আপনার আওতাধীন সমস্ত ফার্স্ট-পার্টি অ্যাপ উইজেটের জন্য, নীচের ডেভেলপার চেকলিস্টটি অনুসরণ করুন।
- প্ল্যাটফর্ম থেকে প্রাপ্ত সুপারিশের ভিত্তিতে অগ্রাধিকার নির্ধারণ করা হয়।
- কোনো সুপারিশের বিস্তারিত জানতে, 'পরিবর্তন' কলামের লিঙ্কটি অনুসরণ করুন।
এলাকা পরিবর্তন বাস্তবায়ন অগ্রাধিকার বাড়ির অভিজ্ঞতা উন্নত করুন স্কেলেবল প্রিভিউ যোগ করুন পি১ একটি উইজেটের বিবরণ যোগ করুন পি১ উইজেট ব্যক্তিগতকরণ আরও সহজ করুন পি২ (ঐচ্ছিক) মসৃণ রূপান্তর সক্ষম করুন পি০ সম্প্রচারিত ট্রাম্পোলিন এড়িয়ে চলুন পি০ উইজেট নির্দেশিকা গ্রহণ করুন উইজেটের আকার এবং বিন্যাস উন্নত করুন পি২ গতিশীল রঙ প্রয়োগ করুন পি০ গোলাকার কোণা প্রয়োগ করুন পি০ নতুন যৌগিক বোতাম যোগ করুন পি২ বিদ্যমান উইজেট কোড সরল করুন RemoteView সংগ্রহগুলি সরল করুন পি২ RemoteView রানটাইম সরল করুন পি২
অতিরিক্ত সম্পদ
SysUI রঙের ব্যবহার
(অ্যাকসেন্ট১ = এ১, অ্যাকসেন্ট২ = এ২, অ্যাকসেন্ট৩ = এ৩, নিউট্রাল১ = এন১, নিউট্রাল২ = এন২)

চিত্র ৪. সিস্টেম UI-তে ডাইনামিক রঙের ব্যবহার
উপাদান লাইব্রেরির রঙের অ্যাট্রিবিউট আপডেট
আসন্ন রিলিজে ম্যাটেরিয়াল তার থিম অ্যাট্রিবিউটগুলো আপডেট করবে এবং নির্দিষ্ট ভিউতে রঙ সরবরাহ করার জন্য কালার রোল তৈরি করবে।
| রঙের ভূমিকা | অ্যান্ড্রয়েড থিম অ্যাট্রিবিউট | হালকা থিম ডাইনামিক কালার | ডার্ক থিম ডাইনামিক কালার |
|---|---|---|---|
| প্রাথমিক | রঙ প্রাথমিক | সিস্টেম_অ্যাকসেন্ট১_৬০০ | সিস্টেম_অ্যাকসেন্ট১_২০০ |
| প্রাথমিক বিষয়ে | প্রাথমিক রঙ | সিস্টেম_অ্যাকসেন্ট১_০ | সিস্টেম_অ্যাকসেন্ট১_৮০০ |
| মাধ্যমিক | রঙ সেকেন্ডারি | সিস্টেম_অ্যাকসেন্ট২_৬০০ | সিস্টেম_অ্যাকসেন্ট২_২০০ |
| সেকেন্ডারিতে | সেকেন্ডারিতে রঙ | সিস্টেম_অ্যাকসেন্ট২_০ | সিস্টেম_অ্যাকসেন্ট২_৮০০ |
| ত্রুটি | রঙের ত্রুটি | প্রযোজ্য নয় (লাল_৬০০) | প্রযোজ্য নয় (লাল_২০০) |
| ত্রুটি হলে | colorOnError | প্রযোজ্য নয় (সাদা) | প্রযোজ্য নয় (লাল_৯০০) |
| পটভূমি | অ্যান্ড্রয়েড:রঙিন পটভূমি | সিস্টেম_নিরপেক্ষ১_১০ | সিস্টেম_নিরপেক্ষ১_৯০০ |
| পটভূমিতে | পটভূমিতে রঙ | সিস্টেম_নিরপেক্ষ১_৯০০ | সিস্টেম_নিরপেক্ষ১_১০০ |
| পৃষ্ঠতল | রঙিন পৃষ্ঠতল | সিস্টেম_নিরপেক্ষ১_১০ | সিস্টেম_নিরপেক্ষ১_৯০০ |
| পৃষ্ঠতলে | পৃষ্ঠে রঙ | সিস্টেম_নিরপেক্ষ১_৯০০ | সিস্টেম_নিরপেক্ষ১_১০০ |
উপাদানটি নিম্নলিখিত পয়েন্টারগুলির সাহায্যে তার স্টেট অ্যাট্রিবিউটগুলি আপডেট করবে:
| রঙের ভূমিকা | অ্যান্ড্রয়েড থিম অ্যাট্রিবিউট | হালকা থিম ডাইনামিক কালার | ডার্ক থিম ডাইনামিক কালার |
|---|---|---|---|
| প্রাথমিক রাষ্ট্রীয় বিষয়বস্তু | রঙ প্রাথমিক অবস্থা বিষয়বস্তু | সিস্টেম_অ্যাকসেন্ট১_৭০০ | সিস্টেম_অ্যাকসেন্ট১_২০০ |
| প্রাথমিক রাজ্য স্তর | রঙ প্রাথমিক অবস্থা স্তর | সিস্টেম_অ্যাকসেন্ট১_৬০০ | সিস্টেম_অ্যাকসেন্ট১_৩০০ |
| মাধ্যমিক রাষ্ট্রীয় বিষয়বস্তু | রঙ সেকেন্ডারি স্টেট কন্টেন্ট | সিস্টেম_অ্যাকসেন্ট২_৭০০ | সিস্টেম_অ্যাকসেন্ট২_২০০ |
| দ্বিতীয় রাজ্য স্তর | রঙ সেকেন্ডারি স্টেট লেয়ার | সিস্টেম_অ্যাকসেন্ট২_৬০০ | সিস্টেম_অ্যাকসেন্ট২_৩০০ |
| প্রাথমিক রাষ্ট্রীয় বিষয়বস্তুতে | প্রাথমিক রাজ্যের বিষয়বস্তুতে রঙ | সিস্টেম_অ্যাকসেন্ট১_০ | সিস্টেম_অ্যাকসেন্ট১_৮০০ |
| প্রাথমিক অবস্থা স্তরে | প্রাথমিক অবস্থা স্তরে রঙ | সিস্টেম_অ্যাকসেন্ট১_৯০০ | সিস্টেম_অ্যাকসেন্ট১_৮০০ |
| মাধ্যমিক রাষ্ট্রীয় বিষয়বস্তুতে | সেকেন্ডারি স্টেট কন্টেন্টে রঙ | সিস্টেম_অ্যাকসেন্ট২_০ | সিস্টেম_অ্যাকসেন্ট২_৮০০ |
| সেকেন্ডারি স্টেট লেয়ারে | সেকেন্ডারি স্টেট লেয়ারে রঙ | সিস্টেম_অ্যাকসেন্ট২_৯০০ | সিস্টেম_অ্যাকসেন্ট২_৮০০ |
| প্রাথমিক কন্টেইনার অবস্থার বিষয়বস্তু | colorOnPrimaryContainerStateContent | সিস্টেম_অ্যাকসেন্ট১_৯০০ | সিস্টেম_অ্যাকসেন্ট১_৯০০ |
| প্রাথমিক কন্টেইনার স্টেট লেয়ারে | colorOnPrimary ContainerStatelayer | সিস্টেম_অ্যাকসেন্ট১_৯০০ | সিস্টেম_অ্যাকসেন্ট১_৯০০ |
| সেকেন্ডারি কন্টেইনার স্টেট কন্টেন্টে | colorOnsecondaryContainerStateContent | সিস্টেম_অ্যাকসেন্ট২_৯০০ | সিস্টেম_অ্যাকসেন্ট২_৯০০ |
| সেকেন্ডারি কন্টেইনার স্টেট লেয়ারে | colorOnsecondary ContainerStatelayer | সিস্টেম_অ্যাকসেন্ট২_৯০০ | সিস্টেম_অ্যাকসেন্ট২_৯০০ |
| তৃতীয় স্তরের কন্টেইনার অবস্থার বিষয়বস্তু | colorOnTertiaryContainerStateContent | সিস্টেম_অ্যাকসেন্ট৩_৯০০ | সিস্টেম_অ্যাকসেন্ট৩_৯০০ |
| টারশিয়ারি কন্টেইনার স্টেট লেয়ারে | colorOnTertiary ContainerStatelayer | সিস্টেম_অ্যাকসেন্ট৩_৯০০ | সিস্টেম_অ্যাকসেন্ট৩_৯০০ |
| পৃষ্ঠতলের অবস্থার বিষয়বস্তু | colorOnSurfaceStateContent | সিস্টেম_নিরপেক্ষ১_৯০০ | সিস্টেম_নিরপেক্ষ১_১০০ |
| পৃষ্ঠতল অবস্থা স্তরে | colorOnSurfaceStateLayer | সিস্টেম_নিরপেক্ষ১_৯০০ | সিস্টেম_নিরপেক্ষ১_১০০ |
| পৃষ্ঠতলে ভ্যারিয়েন্ট স্টেট কন্টেন্ট | colorOnSurfaceVariantStateContent | সিস্টেম_নিরপেক্ষ২_৭০০ | সিস্টেম_নিরপেক্ষ২_২০০ |
| পৃষ্ঠতলে ভ্যারিয়েন্ট স্টেট লেয়ার | colorOnSurfaceVariantStateLayer | সিস্টেম_নিরপেক্ষ২_৭০০ | সিস্টেম_নিরপেক্ষ২_২০০ |
| ত্রুটিপূর্ণ অবস্থার বিষয়বস্তু | colorErrorStateContent | লাল৮০০ | লাল২০০ |
প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী
রঙ নিষ্কাশন
ব্যবহারকারী যখন ওয়ালপেপার পরিবর্তন করেন, তখন কি রঙ নিষ্কাশনের কাজটি স্বয়ংক্রিয়ভাবে হয়ে যায়, নাকি এটি অন্য কোনো উৎস থেকে চালু করতে হয়?
অ্যান্ড্রয়েড ১২ প্যাচগুলোর সাথে, ওয়ালপেপার থেকে রঙ নিষ্কাশন ডিফল্টরূপে চালু থাকে।
ThemeOverlayController.java ThemeOverlayController#mOnColorsChangedListener এবং WallpaperManager#onWallpaperColorsChanged ব্যবহার করে লজিকটি সক্রিয় করে।
লাইভ ওয়ালপেপার বা ভিডিও ওয়ালপেপারের ক্ষেত্রে, কালার এক্সট্র্যাকশন কখন স্ক্রিন থেকে রঙ সংগ্রহ করে, তা কি আমরা জানতে পারি? কিছু ব্যবহারকারী শেষ ফ্রেমের রঙগুলো চাইতে পারেন, কারণ সেটিই সবচেয়ে বেশি সময় ধরে প্রদর্শিত হয়।
ব্যবহারকারী যখন ওয়ালপেপার সেট করেন অথবা স্ক্রিন পাওয়ার সাইকেল করার পর ( WallpaperEngine#notifyColorsChanged এর প্রতিক্রিয়ায়) কালার এক্সট্র্যাকশন ট্রিগার হয়। ব্যবহারকারী স্ক্রিন বন্ধ করে আবার চালু করার পর (লাইভ ওয়ালপেপার থেকে) সর্বশেষ WallpaperColors ইভেন্টটি প্রয়োগ করা হয়।
থিম/ওয়ালপেপার বাছাইকারী
সর্বোচ্চ ব্যবহৃত রঙের পাশাপাশি ব্যবহারকারীদের বেছে নেওয়ার জন্য থিম পিকারটিতে একাধিক উৎস রঙ দেখানোর ব্যবস্থা কীভাবে করব? এক্সট্র্যাকশন লজিক থেকে সেই রঙগুলো পাওয়ার কি কোনো উপায় আছে?
হ্যাঁ। আপনার থিম পিকার-এ আপনি ColorScheme#getSeedColors(wallpaperColors: WallpaperColors) ব্যবহার করতে পারেন।
পিক্সেল নামগুলোকে থিমযুক্ত আইকন হিসেবে ব্যবহার করার একটি ফিচার রয়েছে। আপনার শেয়ার করা তিনটি প্যাচে কি এটি অন্তর্ভুক্ত আছে? OEM-রা কীভাবে এটি বাস্তবায়ন করতে পারে?
না। থিমযুক্ত আইকনগুলো বিটা পর্যায়ে রয়েছে এবং অ্যান্ড্রয়েড ১২-এ উপলব্ধ নয়।
গুগল ওয়ালপেপার অ্যাপটি কালার এক্সট্র্যাকশন এবং সিলেকশন ফিচারগুলো চালু রেখে ব্যবহার করার কোনো উপায় আছে কি?
হ্যাঁ। এই পৃষ্ঠায় পূর্বে বর্ণিত ইন্টিগ্রেশন ধাপগুলো অনুসরণ করে গুগল ওয়ালপেপার অ্যাপের সর্বশেষ সংস্করণে ফিচারগুলো প্রয়োগ করা যেতে পারে।
আরও বিস্তারিত জানতে আপনার TAM-এর সাথে যোগাযোগ করুন।
গুগল কি অ্যাপ বা সোর্স কোড শেয়ার করতে পারে, যাতে OEM-রা তাদের সেটিংস মেনুতে ডাইনামিক কালার প্রিভিউ-এর নিজস্ব সংস্করণ প্রয়োগ করতে পারে, যা দেখতে গুগলের ওয়ালপেপার পিকার অ্যাপে দেখানো প্রিভিউ সেকশনের মতো হবে?
যে প্রধান ক্লাসগুলো প্রিভিউ রেন্ডার করে, সেগুলো হলো WallpaperPicker2 এবং Launcher3 ।
ওয়ালপেপার প্রিভিউ স্ক্রিনটি হলো WallpaperSectionController ।
গুগল ওয়ালপেপার অ্যাপে দেখানো পদ্ধতি অনুযায়ী, রঙ পরিবর্তনের পর প্রিভিউ কীভাবে প্রয়োগ করা যায়?
ওয়ালপেপার পিকার অ্যাপটির জন্য লঞ্চারে একটি ContentProvider উপলব্ধ থাকা প্রয়োজন ( Launcher3 ভিত্তিক লঞ্চারে এটি থাকে)। প্রিভিউটি লঞ্চারের GridCustomizationsProvider দ্বারা সরবরাহ করা হয়, যা ওয়ালপেপার এবং স্টাইল অ্যাপের পড়ার জন্য লঞ্চারের প্রধান অ্যাক্টিভিটির মেটাডেটাতে উল্লেখ করা উচিত। এই সবকিছু AOSP-এর Launcher3-এ বাস্তবায়িত হয়েছে এবং OEM-দের জন্য উপলব্ধ।