এই দস্তাবেজটি কীভাবে গ্লাস শৈলী অনুসরণ করতে হয় এবং আপনার ব্যবহারকারীর অভিজ্ঞতাকে অপ্টিমাইজ করতে পারে এমন সাধারণ UI সর্বোত্তম অনুশীলনগুলি প্রয়োগ করতে হয়। এটি নিম্নলিখিত UI উপাদানগুলিকে কভার করে:
থিম
আমরা আপনাকে যে গ্লাস থিমটি ব্যবহার করার পরামর্শ দিই তার নিম্নলিখিত বৈশিষ্ট্য রয়েছে:
- কোনো অ্যাকশন বার ছাড়াই পূর্ণ-স্ক্রীনে কার্যক্রম দেখায়।
- একটি কঠিন-কালো পটভূমি প্রয়োগ করে।
- কালার এজ ইফেক্টের জন্য কালার লাইটার সেট করে।
- একটি সাদা পাঠ্য রঙ প্রয়োগ করে।
নিম্নলিখিতগুলি গ্লাসের জন্য প্রস্তাবিত থিম সেটিংস:
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> <item name="android:windowBackground">@android:color/black</item> <item name="android:colorEdgeEffect">@android:color/white</item> <item name="android:textColor">@android:color/white</item> </style>
XML লেআউট
এখানে দুটি মৌলিক কার্ড লেআউট রয়েছে যা আপনার টুকরোগুলি স্ফীত করতে পারে:
প্রধান বিন্যাস
এই লেআউটটি একটি কার্ডের জন্য প্রস্তাবিত স্ট্যান্ডার্ড প্যাডিং এবং ফুটার সংজ্ঞায়িত করে। খালি FrameLayout
আপনার নিজস্ব মতামত রাখুন।
এখানে একটি উদাহরণ XML বিন্যাস:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/layout" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:id="@+id/body_layout" android:layout_width="0dp" android:layout_height="0dp" android:layout_margin="@dimen/glass_card_margin" app:layout_constraintBottom_toTopOf="@id/footer" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <!-- Put your widgets inside this FrameLayout. --> </FrameLayout> <!-- The footer view will grow to fit as much content as possible while the timestamp view keeps its width. If the footer text is too long, it will be ellipsized with a 40dp margin between it and the timestamp. --> <TextView android:id="@+id/footer" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/glass_card_margin" android:layout_marginEnd="@dimen/glass_card_margin" android:layout_marginBottom="@dimen/glass_card_margin" android:ellipsize="end" android:singleLine="true" android:textAppearance="?android:attr/textAppearanceSmall" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@id/timestamp" app:layout_constraintStart_toStartOf="parent" /> <TextView android:id="@+id/timestamp" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/glass_card_margin" android:layout_marginBottom="@dimen/glass_card_margin" android:ellipsize="end" android:singleLine="true" android:textAlignment="viewEnd" android:textAppearance="?android:attr/textAppearanceSmall" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
বাম কলাম লেআউট
এই লেআউটটি একটি এক-তৃতীয়াংশ প্রস্থের বাম কলাম এবং দুই-তৃতীয়াংশ প্রস্থের ডান কলামকে দুটি FrameLayout
ক্লাসের আকারে সংজ্ঞায়িত করে যা আপনি আপনার মতামত রাখতে পারেন। একটি উদাহরণ দেখতে নিম্নলিখিত ছবি উল্লেখ করুন.
এখানে একটি উদাহরণ XML বিন্যাস:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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="match_parent"> <FrameLayout android:id="@+id/left_column" android:layout_width="0dp" android:layout_height="match_parent" android:background="#303030" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintWidth_percent=".333"> <!-- Put widgets for the left column inside this FrameLayout. --> </FrameLayout> <FrameLayout android:id="@+id/right_column" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginTop="@dimen/glass_card_two_column_margin" android:layout_marginStart="@dimen/glass_card_two_column_margin" android:layout_marginBottom="@dimen/glass_card_two_column_margin" android:layout_marginEnd="@dimen/glass_card_margin" app:layout_constraintBottom_toTopOf="@id/footer" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/left_column" app:layout_constraintTop_toTopOf="parent"> <!-- Put widgets for the right column inside this FrameLayout. --> </FrameLayout> <!-- The footer view will grow to fit as much content as possible while the timestamp view keeps its width. If the footer text is too long, it will be ellipsized with a 40dp margin between it and the timestamp. --> <TextView android:id="@+id/footer" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/glass_card_margin" android:layout_marginEnd="@dimen/glass_card_margin" android:layout_marginBottom="@dimen/glass_card_margin" android:ellipsize="end" android:singleLine="true" android:textAppearance="?android:attr/textAppearanceSmall" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@id/timestamp" app:layout_constraintStart_toEndOf="@id/left_column" /> <TextView android:id="@+id/timestamp" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/glass_card_margin" android:layout_marginBottom="@dimen/glass_card_margin" android:ellipsize="end" android:singleLine="true" android:textAlignment="viewEnd" android:textAppearance="?android:attr/textAppearanceSmall" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
স্ট্যান্ডার্ড মাত্রা
পূর্ববর্তী লেআউট বা আপনার নিজের লেআউটগুলির সাথে একত্রে নিম্নলিখিতগুলি ব্যবহার করুন একটি ফাইল তৈরি করতে যা গ্লাসের স্ট্যান্ডার্ড শৈলী মেনে চলে৷ আপনার Android প্রকল্পে res/values/dimens.xml
হিসাবে এই ফাইলটি তৈরি করুন।
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- The recommended margin for the top, left, and right edges of a card. --> <dimen name="glass_card_margin">40dp</dimen> <!-- The recommended margin between the bottom of the card and the footer. --> <dimen name="glass_card_footer_margin">50dp</dimen> <!-- The recommended margin for the left column of the two-column card. --> <dimen name="glass_card_two_column_margin">30dp</dimen> </resources>
মেনু
আমরা আপনাকে মেনু তৈরি করতে RecyclerView
ব্যবহার করার পরামর্শ দিই। এগুলি অ্যান্ড্রয়েড স্টুডিও প্রকল্প সংস্থান থেকে স্ট্যান্ডার্ড অ্যান্ড্রয়েড মেনু ফাইলের উপর ভিত্তি করে হওয়া উচিত। অ্যান্ড্রয়েড আপনাকে স্ট্যান্ডার্ড মেনু তৈরিকে ওভাররাইড করতে এবং এটিকে আপনার বাস্তবায়নের সাথে প্রতিস্থাপন করতে দেয়। এটি করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
-
RecyclerView
এর সাথে লেআউট তৈরি করুন এবং এটিকে আপনারActivity
ভিউ হিসেবে সেট করুন। - মেনু আইটেমগুলির নতুন তৈরি সংগ্রহ ব্যবহার করতে
RecyclerView
এবং এর অ্যাডাপ্টার সেট করুন। -
onCreateOptionsMenu
পদ্ধতি ওভাররাইড করুন।- আপনার মেনু স্ফীত করুন এবং প্রতিটি মেনু আইটেমের জন্য সংগ্রহে আপনার নতুন উপাদান যোগ করুন।
- অ্যাডাপ্টারে
notifyDataSetChanged
পদ্ধতিতে কল করুন।
কোটলিন
override fun onCreateOptionsMenu(menu: Menu): Boolean { val menuResource = intent .getIntExtra(EXTRA_MENU_KEY, EXTRA_MENU_ITEM_DEFAULT_VALUE) if (menuResource != EXTRA_MENU_ITEM_DEFAULT_VALUE) { menuInflater.inflate(menuResource, menu) for (i in 0 until menu.size()) { val menuItem = menu.getItem(i) menuItems.add( GlassMenuItem( menuItem.itemId, menuItem.icon, menuItem.title.toString() ) ) adapter.notifyDataSetChanged() } } return super.onCreateOptionsMenu(menu) }
জাভা
@Override public boolean onCreateOptionsMenu(Menu menu) { final int menuResource = getIntent() .getIntExtra(EXTRA_MENU_KEY, EXTRA_MENU_ITEM_DEFAULT_VALUE); if (menuResource != EXTRA_MENU_ITEM_DEFAULT_VALUE) { final MenuInflater inflater = getMenuInflater(); inflater.inflate(menuResource, menu); for (int i = 0; i < menu.size(); i++) { final MenuItem menuItem = menu.getItem(i); menuItems.add( new GlassMenuItem(menuItem.getItemId(), menuItem.getIcon(), menuItem.getTitle().toString())); adapter.notifyDataSetChanged(); } } return super.onCreateOptionsMenu(menu); }
- কোন বিকল্পটি নির্বাচন করা হয়েছে তা নির্ধারণ করতে
LayoutManager
এবংSnapHelper
এর সাথে একসাথেOnScrollListener
ব্যবহার করুন। - মেনু আইটেম নির্বাচন ইভেন্ট পরিচালনা করার জন্য একটি
TAP
অঙ্গভঙ্গি শুনুন। - নির্বাচিত মেনু আইটেম সম্পর্কে তথ্য সহ একটি
Intent
তৈরি করুন। - এই কার্যকলাপের জন্য একটি ফলাফল সেট করুন এবং এটি শেষ করুন।
- আপনি যেখানে একটি মেনু রাখতে চান সেই অংশ বা কার্যকলাপ থেকে
startActivityForResult
কল করুন। এই উদ্দেশ্যে একটিTAP
অঙ্গভঙ্গি ব্যবহার করুন। - নির্বাচিত মেনু আইটেমটি পরিচালনা করতে কলিং ফ্র্যাগমেন্ট বা কার্যকলাপে
onActivityResult
ওভাররাইড করুন।
নির্দেশিকা
আপনার মেনু লেআউট কীভাবে সেট আপ করবেন তার জন্য নিম্নলিখিত পরামর্শগুলির একটি তালিকা রয়েছে:
- পাঠ্য আকার:
64sp
- পটভূমির রঙ:
#96000000
-
64dpx64dp
আকারের উপাদান আইকন ব্যবহার করুন -
windowIsTranslucent
থিম পতাকাtrue
সেট করুন
নিম্নলিখিত চিত্রটি একটি কাস্টমাইজড মেনু বিন্যাসের একটি উদাহরণ:
বাস্তবায়নের বিশদ বিবরণের জন্য কার্ডের নমুনা অ্যাপটি পর্যালোচনা করুন।
সোয়াইপযোগ্য পৃষ্ঠা
গ্লাস ডিসপ্লে এবং টাচপ্যাড একটি সুবিধাজনক উপায়ে সোয়াইপযোগ্য কার্ড প্রদর্শন করতে একসাথে কাজ করে। আপনি স্ট্যান্ডার্ড অ্যান্ড্রয়েড ViewPager
API এর সাথে আপনার কার্যকলাপে সোয়াইপযোগ্য পৃষ্ঠাগুলি তৈরি করতে পারেন।
কার্ড বা স্ক্রিনের মাধ্যমে স্ক্রোল করার জন্য Android ViewPager
কীভাবে ব্যবহার করবেন সে সম্পর্কে আরও তথ্যের জন্য স্ক্রীন স্লাইড প্রশিক্ষণ ডকুমেন্টেশন দেখুন।