1. ভূমিকা
ম্যাটেরিয়াল কম্পোনেন্টস (MDC) ডেভেলপারদের ম্যাটেরিয়াল ডিজাইন বাস্তবায়নে সাহায্য করে। গুগলের ইঞ্জিনিয়ার এবং UX ডিজাইনারদের একটি দল দ্বারা তৈরি, MDC-তে কয়েক ডজন সুন্দর এবং কার্যকরী UI উপাদান রয়েছে এবং এটি অ্যান্ড্রয়েড, iOS, ওয়েব এবং Flutter.material.io/develop-এর জন্য উপলব্ধ। |
কোডল্যাব MDC-101 এবং MDC-102-তে, আপনি Material Components (MDC) ব্যবহার করে Shrine নামক একটি অ্যাপের মূল বিষয়গুলি তৈরি করেছেন, এটি একটি ই-কমার্স অ্যাপ যা পোশাক এবং গৃহস্থালীর জিনিসপত্র বিক্রি করে। এই অ্যাপটিতে একটি ব্যবহারকারী প্রবাহ রয়েছে যা একটি লগইন স্ক্রিন দিয়ে শুরু হয় এবং ব্যবহারকারীকে পণ্য প্রদর্শনকারী হোম স্ক্রিনে নিয়ে যায়।
ম্যাটেরিয়াল ডিজাইনের সাম্প্রতিক সম্প্রসারণ ডিজাইনার এবং ডেভেলপারদের তাদের পণ্যের ব্র্যান্ড প্রকাশের জন্য আরও নমনীয়তা প্রদান করেছে। আপনি এখন শ্রাইনকে কাস্টমাইজ করতে এবং এর অনন্য শৈলী প্রতিফলিত করতে MDC ব্যবহার করতে পারেন।
তুমি কী তৈরি করবে
এই কোডল্যাবে, আপনি Shrine কে এর ব্র্যান্ড প্রতিফলিত করার জন্য কাস্টমাইজ করতে পারবেন:
- রঙ
- টাইপোগ্রাফি
- উচ্চতা
- লেআউট


এই কোডল্যাবে ব্যবহৃত MDC অ্যান্ড্রয়েড উপাদান এবং সাবসিস্টেম:
- থিম
- টাইপোগ্রাফি
- উচ্চতা
তোমার যা লাগবে
- অ্যান্ড্রয়েড ডেভেলপমেন্টের প্রাথমিক জ্ঞান
- অ্যান্ড্রয়েড স্টুডিও (যদি আপনার কাছে ইতিমধ্যে না থাকে তবে এখান থেকে ডাউনলোড করুন)
- একটি অ্যান্ড্রয়েড এমুলেটর বা ডিভাইস (অ্যান্ড্রয়েড স্টুডিওর মাধ্যমে উপলব্ধ)
- নমুনা কোড (পরবর্তী ধাপ দেখুন)
অ্যান্ড্রয়েড অ্যাপ তৈরিতে আপনার অভিজ্ঞতার স্তরকে আপনি কীভাবে মূল্যায়ন করবেন?
2. আপনার উন্নয়ন পরিবেশ সেট আপ করুন
MDC-102 থেকে চালিয়ে যাচ্ছেন?
যদি আপনি MDC-102 সম্পন্ন করে থাকেন, তাহলে আপনার কোডটি এই কোডল্যাবের জন্য প্রস্তুত থাকা উচিত। ধাপ 3 এ যান: রঙ পরিবর্তন করুন ।
স্টার্টার কোডল্যাব অ্যাপটি ডাউনলোড করুন
স্টার্টার অ্যাপটি material-components-android-codelabs-103-starter/kotlin ডিরেক্টরিতে অবস্থিত। শুরু করার আগে সেই ডিরেক্টরিতে cd করতে ভুলবেন না।
...অথবা GitHub থেকে ক্লোন করুন
GitHub থেকে এই কোডল্যাবটি ক্লোন করতে, নিম্নলিখিত কমান্ডগুলি চালান:
git clone https://github.com/material-components/material-components-android-codelabs cd material-components-android-codelabs/ git checkout 103-starter
অ্যান্ড্রয়েড স্টুডিওতে স্টার্টার কোড লোড করুন
- সেটআপ উইজার্ডটি শেষ হয়ে গেলে এবং "ওয়েলকাম টু অ্যান্ড্রয়েড স্টুডিও" উইন্ডোটি প্রদর্শিত হলে, "একটি বিদ্যমান অ্যান্ড্রয়েড স্টুডিও প্রকল্প খুলুন" এ ক্লিক করুন। আপনি যে ডিরেক্টরিতে নমুনা কোডটি ইনস্টল করেছিলেন সেখানে নেভিগেট করুন এবং শিপিং প্রকল্পটি খুলতে "কোটলিন -> shrine" নির্বাচন করুন (অথবা আপনার কম্পিউটারে shrine অনুসন্ধান করুন)।
- অ্যান্ড্রয়েড স্টুডিও উইন্ডোর নীচের দিকে কার্যকলাপ নির্দেশকগুলি যেমনটি দেখায়, অ্যান্ড্রয়েড স্টুডিওটি প্রকল্পটি তৈরি এবং সিঙ্ক করার জন্য কিছুক্ষণ অপেক্ষা করুন।
- এই মুহুর্তে, Android Studio-তে কিছু বিল্ড ত্রুটি দেখা দিতে পারে কারণ আপনার Android SDK বা বিল্ড টুলগুলি, যেমন নীচে দেখানো হয়েছে, অনুপস্থিত। এগুলি ইনস্টল/আপডেট করতে এবং আপনার প্রকল্প সিঙ্ক করতে Android Studio-তে নির্দেশাবলী অনুসরণ করুন।
প্রকল্পের নির্ভরতা যোগ করুন
প্রকল্পটির জন্য MDC অ্যান্ড্রয়েড সাপোর্ট লাইব্রেরির উপর নির্ভরতা প্রয়োজন। আপনার ডাউনলোড করা নমুনা কোডটিতে ইতিমধ্যেই এই নির্ভরতা তালিকাভুক্ত থাকা উচিত, তবে নিশ্চিত করার জন্য নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করা ভাল অভ্যাস।
-
appমডিউলেরbuild.gradleফাইলে যান এবং নিশ্চিত করুন যেdependenciesব্লকে MDC Android এর উপর নির্ভরতা রয়েছে:
api 'com.google.android.material:material:1.1.0-alpha06'
- (ঐচ্ছিক) প্রয়োজনে, নিম্নলিখিত নির্ভরতা যোগ করতে
build.gradleফাইলটি সম্পাদনা করুন এবং প্রকল্পটি সিঙ্ক করুন।
dependencies {
api 'com.google.android.material:material:1.1.0-alpha06'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.android.volley:volley:1.1.1'
implementation 'com.google.code.gson:gson:2.8.5'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.21"
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:core:1.1.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
androidTestImplementation 'androidx.test:runner:1.2.0-alpha05'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0-alpha05'
}
স্টার্টার অ্যাপটি চালান
|
সফল! আপনার ডিভাইস বা এমুলেটরে শ্রাইনের লগইন পৃষ্ঠাটি চলমান দেখতে পাবেন। আপনি যখন "পরবর্তী" টিপবেন, তখন শ্রাইন হোমপেজটি উপরে একটি অ্যাপ বার এবং নীচে পণ্যের চিত্রগুলির একটি গ্রিড সহ প্রদর্শিত হবে।

আসুন, উপরের অ্যাপ বারটিকে শ্রাইন ব্র্যান্ডের সাথে মানানসই করে তুলি, এর রঙ, উচ্চতা এবং টাইপোগ্রাফি পরিবর্তন করে।
৩. রঙ পরিবর্তন করুন
এই রঙের থিমটি একজন ডিজাইনার কাস্টম রঙের সাহায্যে তৈরি করেছেন (নীচের ছবিতে দেখানো হয়েছে)। এতে এমন রঙ রয়েছে যা শ্রাইনের ব্র্যান্ড থেকে নির্বাচিত হয়েছে এবং ম্যাটেরিয়াল থিম এডিটরে প্রয়োগ করা হয়েছে, যা তাদের একটি পূর্ণাঙ্গ প্যালেট তৈরি করার জন্য প্রসারিত করেছে। (এই রঙগুলি ২০১৪ সালের ম্যাটেরিয়াল রঙ প্যালেট থেকে নয়।)
ম্যাটেরিয়াল থিম এডিটর এগুলিকে সংখ্যাসূচকভাবে লেবেলযুক্ত শেডগুলিতে সংগঠিত করেছে, যার মধ্যে ৫০, ১০০, ২০০, .... থেকে ৯০০ পর্যন্ত প্রতিটি রঙের লেবেল রয়েছে। শ্রাইন শুধুমাত্র গোলাপী সোয়াচ থেকে ৫০, ১০০ এবং ৩০০ এবং বাদামী সোয়াচ থেকে ৯০০ শেড ব্যবহার করে।
উপরের অ্যাপ বারের রঙ পরিবর্তন করে সেই রঙের স্কিমটি প্রতিফলিত করা যাক।
রঙ সেট করুন প্রাইমারিডার্ক এবং রঙঅ্যাক্সেন্ট
colors.xml এ, নিম্নলিখিত লাইনগুলি পরিবর্তন করুন। colorAccent অ্যাট্রিবিউট অন্যান্য জিনিসের মধ্যে উপরের অ্যাপ বারের রঙ নিয়ন্ত্রণ করে এবং colorPrimaryDark অ্যাট্রিবিউট স্ট্যাটাস বারের রঙ নিয়ন্ত্রণ করে।
colors.xml সম্পর্কে
<color name="colorPrimaryDark">#FBB8AC</color>
<color name="colorAccent">#FEDBD0</color>
স্ট্যাটাস বারে গাঢ় আইকন ব্যবহার করতে, Theme.Shrine , Shrine এর অ্যাপ থিম-এ নিম্নলিখিতটি যোগ করুন:
স্টাইলস.এক্সএমএল
<item name="android:windowLightStatusBar" tools:targetApi="m">true</item>
<resources xmlns:tools="http://schemas.android.com/tools">
তোমার colors.xml এবং styles.xml দেখতে এইরকম হওয়া উচিত:
colors.xml সম্পর্কে
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#E0E0E0</color>
<color name="colorPrimaryDark">#FBB8AC</color>
<color name="colorAccent">#FEDBD0</color>
<color name="toolbarIconColor">#FFFFFF</color>
<color name="loginPageBackgroundColor">#FFFFFF</color>
<color name="productGridBackgroundColor">#FFFFFF</color>
</resources>
স্টাইলস.এক্সএমএল
<resources xmlns:android="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.Shrine" parent="Theme.MaterialComponents.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowLightStatusBar" tools:targetApi="m">true</item>
</style>
<style name="Widget.Shrine.Toolbar" parent="Widget.AppCompat.Toolbar">
<item name="android:background">?attr/colorAccent</item>
<item name="android:theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
<item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
</style>
</resources>
colors.xml তে, #442C2E তে সেট করা একটি নতুন textColorPrimary রঙের রিসোর্স যোগ করুন, এবং textColorPrimary রঙের রেফারেন্সের জন্য toolbarIconColor অ্যাট্রিবিউট আপডেট করুন।
সেট করার জন্য আপনার styles.xml ফাইলটি আপডেট করুন
আমরা যে textColorPrimary রঙটি সংজ্ঞায়িত করেছি তার সাথে অ্যাট্রিবিউট।
আরও একটি জিনিস: Widget.Shrine.Toolbar স্টাইলে android:theme অ্যাট্রিবিউটটি Theme.Shrine এ সেট করুন।
তোমার colors.xml এবং styles.xml দেখতে এইরকম হওয়া উচিত:
colors.xml সম্পর্কে
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#E0E0E0</color>
<color name="colorPrimaryDark">#FBB8AC</color>
<color name="colorAccent">#FEDBD0</color>
<color name="textColorPrimary">#442C2E</color>
<color name="toolbarIconColor">@color/textColorPrimary</color>
<color name="loginPageBackgroundColor">#FFFFFF</color>
<color name="productGridBackgroundColor">#FFFFFF</color>
</resources>
স্টাইলস.এক্সএমএল
<resources xmlns:android="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.Shrine" parent="Theme.MaterialComponents.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowLightStatusBar" tools:targetApi="m">true</item>
<item name="android:textColorPrimary">@color/textColorPrimary</item>
</style>
<style name="Widget.Shrine.Toolbar" parent="Widget.AppCompat.Toolbar">
<item name="android:background">?attr/colorAccent</item>
<item name="android:theme">@style/Theme.Shrine</item>
<item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
</style>
</resources>
তৈরি করুন এবং চালান। আপনার পণ্য গ্রিড এখন এইরকম দেখাবে:

আমাদের রঙের স্কিমের সাথে মেলে লগইন স্ক্রিনের স্টাইল পরিবর্তন করা যাক।
টেক্সট ফিল্ডগুলিকে স্টাইল করুন
লগইন পৃষ্ঠার টেক্সট ইনপুটগুলিকে রূপরেখায় পরিবর্তন করি এবং আমাদের লেআউটের জন্য আরও ভাল রঙ ব্যবহার করি।
আপনার colors.xml ফাইলে নিম্নলিখিত রঙের রিসোর্স যোগ করুন:
colors.xml সম্পর্কে
<color name="textInputOutlineColor">#FBB8AC</color>
তোমার styles.xml এ দুটি নতুন স্টাইল যোগ করো:
স্টাইলস.এক্সএমএল
<style name="Widget.Shrine.TextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<item name="hintTextAppearance">@style/TextAppearance.Shrine.TextInputLayout.HintText</item>
<item name="hintTextColor">@color/textColorPrimary</item>
<item name="android:paddingBottom">8dp</item>
<item name="boxStrokeColor">@color/textInputOutlineColor</item>
</style>
<style name="TextAppearance.Shrine.TextInputLayout.HintText" parent="TextAppearance.MaterialComponents.Subtitle2">
<item name="android:textColor">?android:attr/textColorPrimary</item>
</style>
অবশেষে, shr_login_fragment.xml এ আপনার TextInputLayout XML কম্পোনেন্টের উভয়ের স্টাইল অ্যাট্রিবিউটকে আপনার নতুন স্টাইলে সেট করুন:
shr_login_fragment.xml সম্পর্কে
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.Shrine.TextInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/shr_hint_username">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:maxLines="1" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/password_text_input"
style="@style/Widget.Shrine.TextInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/shr_hint_password"
app:errorEnabled="true">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/password_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword" />
</com.google.android.material.textfield.TextInputLayout>
বোতামের রঙগুলি স্টাইল করুন
অবশেষে, লগইন পৃষ্ঠায় বোতামগুলির রঙগুলি স্টাইল করুন। আপনার styles.xml এ নিম্নলিখিত স্টাইলগুলি যোগ করুন:
স্টাইলস.এক্সএমএল
<style name="Widget.Shrine.Button" parent="Widget.MaterialComponents.Button">
<item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="backgroundTint">?attr/colorPrimaryDark</item>
</style>
<style name="Widget.Shrine.Button.TextButton" parent="Widget.MaterialComponents.Button.TextButton">
<item name="android:textColor">?android:attr/textColorPrimary</item>
</style>
Widget.Shrine.Button স্টাইলটি ডিফল্ট MaterialButton স্টাইল থেকে প্রসারিত হয় এবং বোতামের টেক্সটের রঙ এবং ব্যাকগ্রাউন্ডের রঙ পরিবর্তন করে। Widget.Shrine.Button.TextButton ডিফল্ট MaterialButton স্টাইল থেকে প্রসারিত হয় এবং কেবল MaterialButton রঙ পরিবর্তন করে।
আপনার Next বাটনে Widget.Shrine.Button স্টাইল এবং আপনার Cancel বাটনে Widget.Shrine.Button.TextButton স্টাইল সেট করুন, নিম্নরূপ:
shr_login_fragment.xml সম্পর্কে
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.button.MaterialButton
android:id="@+id/next_button"
style="@style/Widget.Shrine.Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:text="@string/shr_button_next" />
<com.google.android.material.button.MaterialButton
android:id="@+id/cancel_button"
style="@style/Widget.Shrine.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="12dp"
android:layout_marginRight="12dp"
android:layout_toStartOf="@id/next_button"
android:layout_toLeftOf="@id/next_button"
android:text="@string/shr_button_cancel" />
</RelativeLayout>
লগইন পৃষ্ঠায় Shrine লোগোর রঙ আপডেট করুন। এর জন্য ভেক্টর ড্রয়েবল, shr_logo.xml তে একটি ছোট পরিবর্তন প্রয়োজন হবে। ড্রয়েবল ফাইলটি খুলুন এবং android:fillAlpha প্রোপার্টিটি 1 এ পরিবর্তন করুন। ড্রয়েবলটি দেখতে এইরকম হওয়া উচিত:
shr_logo.xml সম্পর্কে
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="149dp"
android:height="152dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="149"
android:viewportHeight="152">
<path
android:fillAlpha="1"
android:fillColor="#DADCE0"
android:fillType="evenOdd"
android:pathData="M42.262,0L0,38.653L74.489,151.994L148.977,38.653L106.723,0M46.568,11.11L21.554,33.998L99.007,33.998L99.007,11.11L46.568,11.11ZM110.125,18.174L110.125,33.998L127.416,33.998L110.125,18.174ZM80.048,45.116L80.048,123.296L131.426,45.116L80.048,45.116ZM17.551,45.116L33.976,70.101L68.93,70.101L68.93,45.116L17.551,45.116ZM41.284,81.219L68.93,123.296L68.93,81.219L41.284,81.219Z"
android:strokeWidth="1"
android:strokeAlpha="0.4"
android:strokeColor="#00000000" />
</vector>
তারপর, shr_login_fragment.xml এর <ImageView> লোগোতে android:tint অ্যাট্রিবিউটটি ?android:attr/textColorPrimary তে সেট করুন, নিম্নরূপ:
shr_login_fragment.xml সম্পর্কে
<ImageView
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="48dp"
android:layout_marginBottom="16dp"
android:tint="?android:attr/textColorPrimary"
app:srcCompat="@drawable/shr_logo" />
তৈরি করুন এবং চালান। আপনার লগইন স্ক্রিনটি এখন এইরকম দেখাবে:

৪. টাইপোগ্রাফি এবং লেবেল স্টাইল পরিবর্তন করুন
রঙ পরিবর্তনের পাশাপাশি, আপনার ডিজাইনার আপনাকে সাইটে ব্যবহারের জন্য নির্দিষ্ট টাইপোগ্রাফিও দিয়েছেন। আসুন এটি উপরের অ্যাপ বারেও যোগ করি।
উপরের অ্যাপ বারটি স্টাইল করুন
আপনার ডিজাইনারের দেওয়া স্পেসিফিকেশনের সাথে মেলে আপনার উপরের অ্যাপ বারের টেক্সট অ্যাপিয়েন্স স্টাইল করুন। styles.xml এ নিচের টেক্সট অ্যাপিয়েন্স স্টাইলটি যোগ করুন এবং আপনার Widget.Shrine.Toolbar স্টাইলে এই স্টাইলটি রেফারেন্স করার জন্য titleTextAppearance প্রোপার্টি সেট করুন।
স্টাইলস.এক্সএমএল
<style name="Widget.Shrine.Toolbar" parent="Widget.AppCompat.Toolbar">
<item name="android:background">?attr/colorAccent</item>
<item name="android:theme">@style/Theme.Shrine</item>
<item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
<item name="titleTextAppearance">@style/TextAppearance.Shrine.Toolbar</item>
</style>
<style name="TextAppearance.Shrine.Toolbar" parent="TextAppearance.MaterialComponents.Button">
<item name="android:textSize">16sp</item>
</style>
তোমার colors.xml এবং styles.xml দেখতে এইরকম হওয়া উচিত:
colors.xml সম্পর্কে
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#E0E0E0</color>
<color name="colorPrimaryDark">#FBB8AC</color>
<color name="colorAccent">#FEDBD0</color>
<color name="textColorPrimary">#442C2E</color>
<color name="toolbarIconColor">@color/textColorPrimary</color>
<color name="loginPageBackgroundColor">#FFFFFF</color>
<color name="productGridBackgroundColor">#FFFFFF</color>
<color name="textInputOutlineColor">#FBB8AC</color>
</resources>
স্টাইলস.এক্সএমএল
<resources xmlns:android="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.Shrine" parent="Theme.MaterialComponents.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowLightStatusBar" tools:targetApi="m">true</item>
<item name="android:textColorPrimary">@color/textColorPrimary</item>
</style>
<style name="Widget.Shrine.TextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<item name="hintTextAppearance">@style/TextAppearance.Shrine.TextInputLayout.HintText</item>
<item name="hintTextColor">@color/textColorPrimary</item>
<item name="android:paddingBottom">8dp</item>
<item name="boxStrokeColor">@color/textInputOutlineColor</item>
</style>
<style name="TextAppearance.Shrine.TextInputLayout.HintText" parent="TextAppearance.MaterialComponents.Subtitle2">
<item name="android:textColor">?android:attr/textColorPrimary</item>
</style>
<style name="Widget.Shrine.Button" parent="Widget.MaterialComponents.Button">
<item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="backgroundTint">?attr/colorPrimaryDark</item>
</style>
<style name="Widget.Shrine.Button.TextButton" parent="Widget.MaterialComponents.Button.TextButton">
<item name="android:textColor">?android:attr/textColorPrimary</item>
</style>
<style name="Widget.Shrine.Toolbar" parent="Widget.AppCompat.Toolbar">
<item name="android:background">?attr/colorAccent</item>
<item name="android:theme">@style/Theme.Shrine</item>
<item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
<item name="titleTextAppearance">@style/TextAppearance.Shrine.Toolbar</item>
</style>
<style name="TextAppearance.Shrine.Toolbar" parent="TextAppearance.MaterialComponents.Button">
<item name="android:textSize">16sp</item>
</style>
</resources>
লেবেলগুলি স্টাইল করুন
আমরা পণ্য কার্ডের লেবেলগুলিকে সঠিক টেক্সট চেহারা ব্যবহার করে স্টাইল করব এবং কার্ডের মধ্যে অনুভূমিকভাবে কেন্দ্রীভূত করব।
আপনার টাইটেল লেবেলের টাইপোগ্রাফি textAppearanceHeadline6 থেকে textAppearanceSubtitle2 তে নিম্নরূপ আপডেট করুন:
shr_product_card.xml সম্পর্কে
<TextView
android:id="@+id/product_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/shr_product_title"
android:textAppearance="?attr/textAppearanceSubtitle2" />
ছবির লেবেলগুলিকে কেন্দ্রীভূত করতে, shr_product_card.xml এ <TextView> s লেবেলটি পরিবর্তন করে android:textAlignment="center" অ্যাট্রিবিউট সেট করুন:
shr_product_card.xml সম্পর্কে
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/product_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/shr_product_title"
android:textAlignment="center"
android:textAppearance="?attr/textAppearanceSubtitle2" />
<TextView
android:id="@+id/product_price"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/shr_product_description"
android:textAlignment="center"
android:textAppearance="?attr/textAppearanceBody2" />
</LinearLayout>
তৈরি করুন এবং চালান। আপনার পণ্যের গ্রিড স্ক্রিনটি এখন এইরকম দেখাবে:

লগইন স্ক্রিনের টাইপোগ্রাফি পরিবর্তন করে ম্যাচ করা যাক।
লগইন স্ক্রিনের টাইপফেস পরিবর্তন করুন
styles.xml এ, নিম্নলিখিত স্টাইলটি যোগ করুন:
স্টাইলস.এক্সএমএল
<style name="TextAppearance.Shrine.Title" parent="TextAppearance.MaterialComponents.Headline4">
<item name="textAllCaps">true</item>
<item name="android:textStyle">bold</item>
<item name="android:textColor">?android:attr/textColorPrimary</item>
</style>
shr_login_fragment.xml এ, নতুন স্টাইলটি আপনার "SHRINE" <TextView> সেট করুন (এবং সেখানে থাকা textAllCaps এবং textSize বৈশিষ্ট্যগুলি মুছুন):
shr_login_fragment.xml সম্পর্কে
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="132dp"
android:text="@string/shr_app_name"
android:textAppearance="@style/TextAppearance.Shrine.Title" />
তৈরি করুন এবং চালান। আপনার লগইন স্ক্রিনটি এখন এইরকম দেখাবে:

৫. উচ্চতা সামঞ্জস্য করুন
এখন যেহেতু আপনি পৃষ্ঠাটি নির্দিষ্ট রঙ এবং টাইপোগ্রাফি দিয়ে স্টাইল করেছেন যা শ্রাইনের সাথে মেলে, আসুন শ্রাইনের পণ্যগুলি দেখানো কার্ডগুলি একবার দেখে নেওয়া যাক। এই মুহূর্তে, সেগুলি অ্যাপের নেভিগেশনের নীচে একটি সাদা পৃষ্ঠে স্থাপন করা হয়েছে। পণ্যগুলির প্রতি দৃষ্টি আকর্ষণ করার জন্য, আসুন সেগুলিতে আরও জোর দেই।
পণ্যের গ্রিডের উচ্চতা পরিবর্তন করুন
উপরের অ্যাপ বারের উপরে ভাসমান একটি শীটে কন্টেন্টটি দেখানোর জন্য, উপরের অ্যাপ বারের উচ্চতা পরিবর্তন করুন। আপনার AppBarLayout এ app:elevation অ্যাট্রিবিউট এবং shr_product_grid_fragment.xml এ আপনার NestedScrollView XML উপাদানগুলিতে android:elevation অ্যাট্রিবিউট যোগ করুন:
shr_product_grid_fragment.xml সম্পর্কে
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:elevation="0dp">
<androidx.appcompat.widget.Toolbar
android:id="@+id/app_bar"
style="@style/Widget.Shrine.Toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:navigationIcon="@drawable/shr_menu"
app:title="@string/shr_app_name" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="56dp"
android:background="@color/productGridBackgroundColor"
android:elevation="8dp"
android:paddingStart="@dimen/shr_product_grid_spacing"
android:paddingEnd="@dimen/shr_product_grid_spacing"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.core.widget.NestedScrollView>
কার্ডের উচ্চতা (এবং রঙ) পরিবর্তন করুন
shr_product_card.xml এ app:cardElevation 2dp থেকে 0dp এ পরিবর্তন করে প্রতিটি কার্ডের উচ্চতা সামঞ্জস্য করুন। app:cardBackgroundColor কেও @android:color/transparent এ পরিবর্তন করুন।
shr_product_card.xml সম্পর্কে
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardBackgroundColor="@android:color/transparent"
app:cardElevation="0dp"
app:cardPreventCornerOverlap="true">
একবার দেখে নাও! তুমি পণ্য গ্রিড পৃষ্ঠার প্রতিটি কার্ডের উচ্চতা সামঞ্জস্য করেছ।

পরবর্তী বোতামের উচ্চতা পরিবর্তন করুন
styles.xml এ, আপনার Widget.Shrine.Button স্টাইলে নিম্নলিখিত বৈশিষ্ট্যটি যোগ করুন:
স্টাইলস.এক্সএমএল
<item name="android:stateListAnimator" tools:ignore="NewApi">
@animator/shr_next_button_state_list_anim
</item>
Button এর স্টাইলে android:stateListAnimator সেট করলে আমাদের দেওয়া অ্যানিমেটরটি ব্যবহার করার জন্য Next বোতামটি সেট হয়।
তৈরি করুন এবং চালান। আপনার লগইন স্ক্রিনটি এখন এইরকম দেখাবে:

৬. লেআউট পরিবর্তন করুন
আসুন লেআউট পরিবর্তন করে বিভিন্ন আকৃতির অনুপাত এবং আকারে কার্ডগুলি দেখাই, যাতে প্রতিটি কার্ড অন্যদের থেকে অনন্য দেখায়।
একটি স্ট্যাগার্ড রিসাইক্লারভিউ অ্যাডাপ্টার ব্যবহার করুন
আমরা আপনার জন্য staggeredgridlayout প্যাকেজে একটি নতুন RecyclerView অ্যাডাপ্টার সরবরাহ করেছি যা একটি অসমমিত স্ট্যাগার্ড কার্ড লেআউট প্রদর্শন করে, যা অনুভূমিকভাবে স্ক্রোল করার জন্য তৈরি। আপনি নিজেই সেই কোডটি খনন করতে পারেন, তবে আমরা এখানে এটি কীভাবে প্রয়োগ করা হয়েছে তা নিয়ে আলোচনা করব না।
এই নতুন অ্যাডাপ্টারটি ব্যবহার করার জন্য, ProductGridFragment.kt এ আপনার onCreateView() পদ্ধতিটি পরিবর্তন করুন। "Set up the RecyclerView " মন্তব্যের পরে কোড ব্লকটি নিম্নলিখিতটি দিয়ে প্রতিস্থাপন করুন:
প্রোডাক্টগ্রিডফ্রেগমেন্ট.কেটি
// Set up the RecyclerView
view.recycler_view.setHasFixedSize(true)
val gridLayoutManager = GridLayoutManager(context, 2, RecyclerView.HORIZONTAL, false)
gridLayoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int): Int {
return if (position % 3 == 2) 2 else 1
}
}
view.recycler_view.layoutManager = gridLayoutManager
val adapter = StaggeredProductCardRecyclerViewAdapter(
ProductEntry.initProductEntryList(resources))
view.recycler_view.adapter = adapter
val largePadding = resources.getDimensionPixelSize(R.dimen.shr_staggered_product_grid_spacing_large)
val smallPadding = resources.getDimensionPixelSize(R.dimen.shr_staggered_product_grid_spacing_small)
view.recycler_view.addItemDecoration(ProductGridItemDecoration(largePadding, smallPadding))
আমাদের NestedScrollView থেকে প্যাডিংগুলি সরাতে আমাদের shr_product_grid_fragment.xml এ একটি ছোট পরিবর্তন করতে হবে, যেমন:
shr_product_grid_fragment.xml সম্পর্কে
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="56dp"
android:background="@color/productGridBackgroundColor"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:elevation="6dp">
অবশেষে, আমরা ProductGridItemDecoration.kt পরিবর্তন করে RecyclerView মধ্যে আমাদের কার্ড প্যাডিং সামঞ্জস্য করব। ProductGridItemDecoration.kt এর getItemOffsets() পদ্ধতিটি নিম্নরূপ পরিবর্তন করুন:
পণ্যগ্রিডআইটেমডেকোরেশন.কেটি
override fun getItemOffsets(outRect: Rect, view: View,
parent: RecyclerView, state: RecyclerView.State?) {
outRect.left = smallPadding
outRect.right = largePadding
}
তৈরি করুন এবং চালান। পণ্য গ্রিড আইটেমগুলি এখন স্তব্ধ করা উচিত:

৭. অন্য থিম চেষ্টা করুন
রঙ আপনার ব্র্যান্ড প্রকাশের একটি শক্তিশালী উপায়, এবং রঙের সামান্য পরিবর্তন আপনার ব্যবহারকারীর অভিজ্ঞতার উপর একটি বড় প্রভাব ফেলতে পারে। এটি পরীক্ষা করার জন্য, আসুন দেখি ব্র্যান্ডের রঙের স্কিম সম্পূর্ণ ভিন্ন হলে শ্রাইন কেমন দেখাত।
স্টাইল এবং রঙ পরিবর্তন করুন
styles.xml এ, নিম্নলিখিত নতুন থিম যোগ করুন:
স্টাইলস.এক্সএমএল
<style name="Theme.Shrine.Autumn" parent="Theme.Shrine">
<item name="colorPrimary">#FFCF44</item>
<item name="colorPrimaryDark">#FD9725</item>
<item name="colorAccent">#FD9725</item>
<item name="colorOnPrimary">#FFFFFF</item>
<item name="colorError">#FD9725</item>
</style>
এবং AndroidManifest.xml তে, আপনার অ্যাপ্লিকেশনে এই নতুন থিমটি ব্যবহার করুন:
অ্যান্ড্রয়েডম্যানিফেস্ট.এক্সএমএল
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/shr_app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:name="com.google.codelabs.mdc.kotlin.shrine.application.ShrineApplication"
android:theme="@style/Theme.Shrine.Autumn">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
নিচের চিত্রের মতো colors.xml ব্যবহার করে টুলবার আইকনের রঙ পরিবর্তন করুন:
colors.xml সম্পর্কে
<color name="toolbarIconColor">#FFFFFF</color>
তারপর, আমাদের টুলবার স্টাইলের android:theme অ্যাট্রিবিউটটি "?theme" অ্যাট্রিবিউট ব্যবহার করে বর্তমান থিমের রেফারেন্স হিসেবে সেট করুন, হার্ড কোডিং করার পরিবর্তে:
স্টাইলস.এক্সএমএল
<style name="Widget.Shrine.Toolbar" parent="Widget.AppCompat.Toolbar">
<item name="android:background">?attr/colorAccent</item>
<item name="android:theme">?theme</item>
<item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
<item name="titleTextAppearance">@style/TextAppearance.Shrine.Toolbar</item>
</style>
এরপর, লগইন স্ক্রিনের টেক্সট ফিল্ডে হিন্ট টেক্সটের রঙ হালকা করুন। টেক্সট ফিল্ডের স্টাইলে android:textColorHint অ্যাট্রিবিউট যোগ করুন:
স্টাইলস.এক্সএমএল
<style name="Widget.Shrine.TextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<item name="hintTextAppearance">
@style/TextAppearance.Shrine.TextInputLayout.HintText
</item>
<item name="android:paddingBottom">8dp</item>
<item name="android:textColorHint">?attr/colorPrimaryDark</item>
</style>
তৈরি করুন এবং চালান। নতুন থিমটি এখন আপনার প্রিভিউয়ের জন্য উপস্থিত হওয়া উচিত।


MDC-104 এ যাওয়ার আগে এই বিভাগে পরিবর্তিত কোডটি পূর্বাবস্থায় ফিরিয়ে আনুন।
৮. সংক্ষিপ্তসার
এতক্ষণে, আপনি এমন একটি অ্যাপ তৈরি করেছেন যা আপনার ডিজাইনারের ডিজাইনের স্পেসিফিকেশনের সাথে সাদৃশ্যপূর্ণ।
পরবর্তী পদক্ষেপ
আপনি নিম্নলিখিত MDC উপাদানগুলি ব্যবহার করেছেন: থিম, টাইপোগ্রাফি এবং উচ্চতা। আপনি [MDC ওয়েব লাইব্রেরি] তে আরও উপাদান এবং সাবসিস্টেম অন্বেষণ করতে পারেন।
আপনার পরিকল্পিত অ্যাপ ডিজাইনে যদি এমন উপাদান থাকে যা MDC লাইব্রেরিতে নেই? MDC-104: Material Design Advanced Components -এ , আমরা দেখব কিভাবে MDC লাইব্রেরি ব্যবহার করে একটি নির্দিষ্ট চেহারা অর্জনের জন্য কাস্টম উপাদান তৈরি করা যায়।