Wear OS 7 (API 37) পর্যন্ত, প্ল্যাটফর্মটি অ্যাপ্লিকেশন উইন্ডোর উপরে সিস্টেম স্ট্যাটাস বার রেন্ডার করেনি—অ্যাপগুলি পুরো স্ক্রিনের মালিকানাধীন ছিল এবং উপরে (১২টা) পজিশনে যেকোনও কন্টেন্ট আঁকতে পারত (যেমন অ্যাপ-মধ্যস্থ TimeText ঘড়ি, কাস্টম কার্ভড হেডার বা উপরের কন্ট্রোল)।
Wear OS 8 থেকে শুরু করে—এবং Wear OS 7.1 বিটা প্রিভিউ এমুলেটরে (API 37.2-beta1) আগাম
প্রিভিউ টেস্টিংয়ের জন্য এখন উপলভ্য—
সিস্টেম
সময় ও স্ট্যাটাস ইন্ডিকেটর দেখানোর জন্য ১২টার পজিশনে অ্যাপ্লিকেশন উইন্ডোর উপরে স্ট্যাটাস বার
রেন্ডার করে। সিস্টেম স্ট্যাটাস বারের সাথে ওভারল্যাপ হওয়া আটকাতে,
অ্যাপের নিজস্ব ঘড়ি (TimeText) রেন্ডার করা বন্ধ করা উচিত এবং
উপরের স্ট্যাটাস বার উইন্ডো ইনসেট (Wear Compose 1.8 থেকে AppScaffold এবং
ScreenScaffold দ্বারা অটোমেটিক ম্যানেজ করা হয়) মেনে চলা উচিত অথবা ফুল-স্ক্রিন ইমারসিভ অভিজ্ঞতার প্রয়োজন হলে
সিস্টেম স্ট্যাটাস বার লুকিয়ে রাখা উচিত।
গুরুত্বপূর্ণ সুবিধার মধ্যে এগুলি অন্তর্ভুক্ত:
- ভিজ্যুয়াল ধারাবাহিকতা: সিস্টেম ও সব অ্যাপ জুড়ে ঘড়ির ইউনিফর্ম টাইপোগ্রাফি, প্লেসমেন্ট ও ব্যাকপ্লেট।
- সিস্টেম স্ট্যাটাস ইন্ডিকেটর: প্ল্যাটফর্মকে স্ট্যাটাস আইকন (যেমন, অ্যাক্টিভ মাইক্রোফোন ও লোকেশন ইন্ডিকেটর, কানেক্টিভিটি স্ট্যাটাস বা ব্যাটারি সংক্রান্ত তথ্য) এবং বিভিন্ন সারফেস জুড়ে সময় দেখানোর অনুমতি দেয়। অগ্রাধিকারের ভিত্তিতে, একবারে শুধুমাত্র একটি আইকন দেখানো হয়।
- অটোমেটিক স্ক্রল ও ট্রানজিশন কোঅর্ডিনেশন: Jetpack Compose for Wear OS 1.8-এর সাথে পেয়ার করা হলে, ব্যবহারকারী কন্টেন্ট স্ক্রল করার সময় সিস্টেম স্ট্যাটাস বার অটোমেটিক লুকিয়ে যায় এবং কিছুক্ষণ (২ সেকেন্ড) কোনও অ্যাক্টিভিটি না হলে আবার দেখা যায়।
আপনার অ্যাপ সেট-আপ করুন
শুরু করতে, নিম্নলিখিত পূর্বপ্রয়োজনীয় ধাপগুলি সম্পূর্ণ করুন:
- Android Studio প্রিভিউ (Canary) ইনস্টল করুন।
- SDK ম্যানেজারে, Wear OS 7.1 প্রিভিউ এমুলেটর সিস্টেম ইমেজ (API 37.2-beta1) ডাউনলোড করুন। এই ভার্সনটি Wear OS 8 SDK-এর আগে Wear OS 8 সিস্টেম স্ট্যাটাস বারে আগেভাগে অ্যাক্সেস প্রদান করে।
- ডিভাইস ম্যানেজারে, API 37.2-beta1 ইমেজ ব্যবহার করে Wear OS ভার্চুয়াল ডিভাইস তৈরি ও লঞ্চ করুন।
আপনার অ্যাপে সিস্টেম স্ট্যাটাস বার সাপোর্ট করতে, আপনার অ্যাপের targetSdk
ভার্সন 35 বা তার পরবর্তী যেকোনও ভার্সনে আপডেট করুন। প্ল্যাটফর্মটি শুধুমাত্র API 35+ টার্গেট করা অ্যাপের জন্য সিস্টেম স্ট্যাটাস বার অ্যাক্টিভেট করে
যাতে লিগ্যাসি অ্যাপের জন্য ব্যাকওয়ার্ড কম্প্যাটিবিলিটি বজায় রাখা যায়।
এছাড়াও, আপনার Wear Compose ডিপেন্ডেন্সি লেটেস্ট আলফা
ভার্সনে আপডেট করুন—বর্তমানে 1.8.0-alpha02—নিচের
কোড স্নিপেটে যেমন দেখানো হয়েছে। আপনার অ্যাপ Wear Compose-এর পুরনো ভার্সন ব্যবহার করলে, মাইগ্রেশন সহজ করতে
আপনি Wear Compose Material 3 মাইগ্রেশন স্কিল ব্যবহার করতে
পারবেন।
android {
defaultConfig {
targetSdk = 35
}
}
dependencies {
implementation("androidx.wear.compose:compose-foundation:1.8.0-alpha02")
implementation("androidx.wear.compose:compose-material3:1.8.0-alpha02")
}
সিস্টেম স্ট্যাটাস বার ব্যবহার করা
Wear Compose Material 3 1.8.0-এর লেটেস্ট আলফা ভার্সনে—বর্তমানে
1.8.0-alpha02—লাইব্রেরি অটোমেটিক আপনার অ্যাপকে অপ্ট-ইন করে
com.google.wear.ENABLE_GLOBAL_STATUS_BAR <meta-data> প্রপার্টি
আপনার AndroidManifest.xml-এ মার্জ করার মাধ্যমে। রানটাইমে, AppScaffold এবং ScreenScaffold
চেক করে দেখে যে ডিভাইসে সিস্টেম স্ট্যাটাস বার চালু করা আছে কিনা এবং এই
ম্যানিফেস্ট অপ্ট-ইন প্রপার্টি true-এ সেট করা আছে কিনা:
- প্রিভিউ এমুলেটর / Wear OS 8+ (চালু করা থাকলে):
AppScaffoldএটির ইন্টার্নালTimeTextবন্ধ করে দেয় যাতে সিস্টেম স্ট্যাটাস বার ১২টার পজিশনে ডুপ্লিকেশন ছাড়াই পরিষ্কারভাবে রেন্ডার করে।ScreenScaffoldস্ট্যাটাস বার ইনসেট বাউন্ডারি বিবেচনা করার জন্যcontentPaddingআবার গণনা করে এবং তালিকা স্ক্রল করার সাথে সাথে স্ট্যাটাস বার লুকানো এবং দেখানোর বিষয়টি কোঅর্ডিনেট করে। - Wear OS 7 এবং পুরনো ডিভাইসে (অথবা অপ্ট-ইন না করা থাকলে):
AppScaffoldঅটোমেটিক স্ট্যান্ডার্ড ইন-অ্যাপTimeTextরেন্ডার করার জন্য ফিরে যায়, একটি সিঙ্গেল কোডবেস থেকে সম্পূর্ণ ব্যাকওয়ার্ড কম্প্যাটিবিলিটি বজায় রাখে।
@Composable
fun GsbSampleApp() {
// AppScaffold coordinates the system status bar across the app
// and falls back to rendering TimeText on Wear OS 7 and earlier.
AppScaffold {
val columnState = rememberTransformingLazyColumnState()
// ScreenScaffold includes status bar top inset clearance in
// contentPadding and hides/shows the status bar during list scrolling.
ScreenScaffold(scrollState = columnState) { contentPadding ->
TransformingLazyColumn(
state = columnState,
contentPadding = contentPadding,
) {
item {
ListHeader { Text("Hello Status Bar") }
}
items(count = 15) { index ->
Button(onClick = { /* Handle click */ }) {
Text("Item #${index + 1}")
}
}
}
}
}
}
স্যাম্পেল রান করার সময় কী কী প্রত্যাশা করা যেতে পারে:
- অ্যাক্টিভ না থাকলে (তালিকার সবচেয়ে উপরে): সিস্টেম স্ট্যাটাস বার ১২টার পজিশনে দেখানো হয়। "হ্যালো স্ট্যাটাস বার" হেডারটি স্ট্যাটাস বার ইনসেট এরিয়ার নিচে ক্লিপিং বা ওভারল্যাপিং ছাড়াই বসে।
- নিচের দিকে স্ক্রল করা: আপনি তালিকার আইটেম স্ক্রল করার সময় স্ট্যাটাস বার লুকিয়ে যায় এবং তালিকার আইটেমগুলি উপরের বেজেলের পিছনে এক প্রান্ত থেকে অন্য প্রান্তে স্ক্রল করে।
- আইডল: আপনি স্ক্রল করা বন্ধ করে স্ক্রিন থেকে আঙুল সরিয়ে নিলে, স্ট্যাটাস বার ~২ সেকেন্ড পরে অটোমেটিক আবার দেখা যায়।
সাধারণ পরিস্থিতি ও কাস্টমাইজেশন ম্যানেজ করা
সিস্টেম স্ট্যাটাস বার নিয়ে কাজ করার সময় আপনি যেসব সাধারণ সমস্যার সম্মুখীন হতে পারেন, সেগুলি কীভাবে সমাধান করবেন তা নিম্নলিখিত বিভাগে বর্ণনা করা হয়েছে।
স্ক্রল করা যায় না (স্ট্যাটিক) এমন স্ক্রিন ম্যানেজ করা
স্ক্রলিং তালিকার পরিবর্তে স্ট্যাটিক লেআউট (যেমন Column বা Box) ব্যবহার করা স্ক্রিনে, আপনার রুট লেআউটে ScreenScaffold-এর দেওয়া contentPadding প্রয়োগ করুন যাতে
উপরের UI এলিমেন্ট সিস্টেম স্ট্যাটাস বারের উপর ওভারল্যাপ না করে:
AppScaffold {
ScreenScaffold { contentPadding ->
Column(modifier = Modifier.padding(contentPadding)) {
Text("Static Screen Content")
}
}
}
ফুল-স্ক্রিন ইন্ট্যার্যাক্টিভ কম্পোনেন্ট নিয়ে কাজ করা
Wear Compose Material 3-এ ফুল-স্ক্রিন ইন্টার্যাক্টিভ কম্পোনেন্ট—যার মধ্যে
AlertDialog, Dialog, Stepper, TimePicker এবং
DatePicker অন্তর্ভুক্ত—স্ক্রিনে থাকাকালীন সিস্টেম স্ট্যাটাস বার অটোমেটিক লুকায় যাতে তাদের
কন্ট্রোল সার্কুলার ডিসপ্লের উপরের অংশে সম্পূর্ণ অ্যাক্সেস পায়। বাতিল করা হলে,
উইন্ডো ইনসেট কন্ট্রোলার API ব্যবহার করে সিস্টেম স্ট্যাটাস বার অটোমেটিক রিস্টোর করা হয়।
ইমারসিভ মোডে পাল্টান
ইমারসিভ মোডে পরিবর্তন করতে—যেখানে সিস্টেম স্ট্যাটাস বার এবং লোকাল
TimeText দুটিই লুকানো থাকে—আপনার অ্যাপ বা স্ক্রিনে StatusBarSuppression কম্পোজেবল যোগ করুন। ব্যবহারকারী অল্প সময়ের জন্য দেখেন (কনফার্মেশন ওভারলে, ডায়ালগ) বা পুরো ডিসপ্লে ব্যবহার করেন (ফুল-স্ক্রিন প্রগ্রেস ইন্ডিকেটর) এমন স্ক্রিনের জন্য ইমারসিভ মোড রিজার্ভ করুন।
স্ক্রিন-লেভেল ইমারসিভ মোড কখন ব্যবহার করবেন তা বিবেচনা করুন
আপনার অ্যাপের শুধুমাত্র একটি নির্দিষ্ট স্ক্রিন ফুল-স্ক্রিন / ইমারসিভ হতে হলে,
ScreenScaffold-এর কন্টেন্টের মধ্যে StatusBarSuppression() কল করুন।
ScreenScaffold স্ক্রিন অ্যাক্টিভ থাকাকালীন সিস্টেম স্ট্যাটাস বার অটোমেটিক লুকিয়ে রাখে (এবং উপরের
স্ট্যাটাস বার ইনসেট প্যাডিং বাদ দেয়), তারপর অন্য স্ক্রিনে ফিরে যাওয়ার সময় সিস্টেম
স্ট্যাটাস বার ফিরিয়ে আনে:
AppScaffold {
ScreenScaffold() {
StatusBarSuppression()
// Full-screen immersive content
}
}
অ্যাপ-লেভেল ইমারসিভ মোড কখন ব্যবহার করবেন তা বিবেচনা করুন
আপনার সম্পূর্ণ অ্যাপ্লিকেশন (বা Activity) যদি সব স্ক্রিন জুড়ে একটি ইমারসিভ ফুল-স্ক্রিন
অভিজ্ঞতা হয়, তাহলে AppScaffold লেভেলে StatusBarSuppression ব্যবহার করুন এবং সব স্ক্রিনে সিস্টেম স্ট্যাটাস বার আড়াল করতে আপনার কন্টেন্ট র্যাপ করুন:
// Use StatusBarSuppression at AppScaffold level and wrap your content
// to suppress status bar in the entire scaffold.
AppScaffold {
StatusBarSuppression {
SwipeDismissableNavHost(...) {
// Nested screens inherit suppression and 0.dp padding
}
}
}
কাস্টম সময় টেক্সট ওভাররাইড দেখান
Wear OS 8-এ মাইগ্রেশন করার সময়, আপনার অ্যাপ জুড়ে বা নির্দিষ্ট স্ক্রিনে, কাস্টম কার্ভড হেডার দেখাতে বা সিস্টেম স্ট্যাটাস বার থেকে সাময়িকভাবে অপ্ট-আউট করতে, কাস্টম timeText কম্পোজেবল পাস করলে সিস্টেম স্ট্যাটাস বার সাপ্রেস হয়ে যায়:
// Screen-level custom TimeText override:
ScreenScaffold(
timeText = { TimeText { timeTextCurvedText("Custom Status") } },
) {
// Content
}
// App-level opt-out using in-app TimeText:
AppScaffold(
timeText = { TimeText() },
) {
// Screens
}
Views ব্যবহার করে প্রয়োগ করুন (সাজেস্ট করা হয় না)
আপনার অ্যাপ যদি Wear OS-এর জন্য Jetpack Compose-এর পরিবর্তে Android Views ব্যবহার করে, তাহলে AndroidManifest.xml ব্যবহার করে
চালু করুন। Wear Compose Material 3-এর লেটেস্ট আলফা রিলিজ-এর মতো নয়, যা সিস্টেম স্ট্যাটাস বার অটোমেটিক চালু করে, ভিউ-ভিত্তিক অ্যাপকে অবশ্যই <application>-এর মধ্যে ENABLE_GLOBAL_STATUS_BAR <meta-data> ট্যাগ যোগ করে স্পষ্টভাবে অপ্ট-ইন করতে হবে:
<application ...>
<meta-data
android:name="com.google.wear.ENABLE_GLOBAL_STATUS_BAR"
android:value="true" />
</application>
সবচেয়ে উপরের উইন্ডো ইনসেট মনিটর করুন
ViewCompat.setOnApplyWindowInsetsListener ব্যবহার করুন এবং
windowInsets.getInsets(WindowInsetsCompat.Type.statusBars())-এর ভ্যালু চেক করুন। statusBarInsets.top > 0
হলে, আপনার পুরনো ১২ ও'ক্লক UI সরিয়ে দিন এবং উপরের প্যাডিং অ্যাডজাস্ট করুন; অন্যথায়, আপনার পুরনো UI-তে ফিরে যান:
ViewCompat.setOnApplyWindowInsetsListener(rootView) { view, windowInsets ->
val statusBarInsets = windowInsets.getInsets(
WindowInsetsCompat.Type.statusBars()
)
if (statusBarInsets.top > 0) {
// status bar is visible: remove legacy 12 o'clock UI and apply top inset padding
view.updatePadding(top = statusBarInsets.top)
} else {
// status bar is not visible: fall back to legacy UI and padding
}
WindowInsetsCompat.CONSUMED
}
প্রোগ্রাম্যাটিক্যালি স্ট্যাটাস বার লুকান ও দেখুন
Compose-এ ScreenScaffold-এর মতো নয়, ভিউ-ভিত্তিক অ্যাপকে অবশ্যই স্পষ্টভাবে
সিস্টেম স্ট্যাটাস বার লুকাতে বা দেখাতে হবে (যেমন, ফুল-স্ক্রিন
ইমারসিভ ভিউতে প্রবেশ করার সময় বা স্ক্রল-অ্যাওয়ে আচরণ সমন্বয় করার সময়)
WindowInsetsControllerCompat ব্যবহার করে:
val insetsController = WindowCompat.getInsetsController(window, window.decorView)
// Hide the status bar
insetsController.hide(WindowInsetsCompat.Type.statusBars())
// Show the status bar
insetsController.show(WindowInsetsCompat.Type.statusBars())
আপনার অ্যাপ টেস্ট করুন
Wear OS 7.1 বিটা প্রিভিউ এমুলেটরে (API 37.2-beta1) আপনার অ্যাপ পরীক্ষা করার সময়, নিম্নলিখিত বিষয়গুলি চেক করুন:
- ঘড়ি শুধুমাত্র একবার দেখা যায়: যাচাই করুন যে শুধুমাত্র সিস্টেম স্ট্যাটাস বার সময়
১২টার পজিশনে দেখা যায় এবং কোনও লিগ্যাসি ইন-অ্যাপ
TimeTextএবং অ্যাপ কন্টেন্ট এটিকে ওভারল্যাপ করে না। - উপরের প্যাডিং: স্ক্রিনের শীর্ষক, হেডার এবং উপরের বোতাম স্ট্যাটাস বারের নিচে দেখা যাচ্ছে কিনা তা যাচাই করুন।
- ফুল-স্ক্রিন ওভারলে ও ডায়ালগ: ডায়ালগ, পিকার, স্টেপার ও কাস্টম ফুল-স্ক্রিন অ্যাক্টিভিটি খোলার সময় স্ট্যাটাস বার আড়াল করে এবং বন্ধ করার সময় সেটি আবার দেখায় কিনা তা যাচাই করুন।