CoordinatorLayout
एक ViewGroup
है. इसकी मदद से, मुश्किल, ओवरलैप होने वाले, और नेस्ट किए गए लेआउट बनाए जा सकते हैं. इसका इस्तेमाल कंटेनर के तौर पर किया जाता है. इससे, इसमें मौजूद व्यू के लिए, Material Design के कुछ इंटरैक्शन चालू किए जा सकते हैं. जैसे, टूलबार और बॉटम शीट को बड़ा/छोटा करना.
Compose में, CoordinatorLayout
के सबसे करीब Scaffold
होता है. Scaffold
, कॉन्टेंट स्लॉट उपलब्ध कराता है. इनकी मदद से, Material कॉम्पोनेंट को स्क्रीन के सामान्य पैटर्न और इंटरैक्शन में शामिल किया जा सकता है. इस पेज पर बताया गया है कि CoordinatorLayout
को Compose में इस्तेमाल करने के लिए, CoordinatorLayout
को कैसे माइग्रेट किया जा सकता है.Scaffold
माइग्रेशन के चरण
CoordinatorLayout
से Scaffold
पर माइग्रेट करने के लिए, यह तरीका अपनाएं:
नीचे दिए गए स्निपेट में,
CoordinatorLayout
मेंAppBarLayout
शामिल है. इसमेंToolBar
,ViewPager
, औरFloatingActionButton
शामिल हैं. अपने यूज़र इंटरफ़ेस (यूआई) के क्रम सेCoordinatorLayout
और उसके चाइल्ड को हटाकर, उसकी जगहComposeView
जोड़ें.<!-- <androidx.coordinatorlayout.widget.CoordinatorLayout--> <!-- android:id="@+id/coordinator_layout"--> <!-- android:layout_width="match_parent"--> <!-- android:layout_height="match_parent"--> <!-- android:fitsSystemWindows="true">--> <!-- <androidx.compose.ui.platform.ComposeView--> <!-- android:id="@+id/compose_view"--> <!-- android:layout_width="match_parent"--> <!-- android:layout_height="match_parent"--> <!-- app:layout_behavior="@string/appbar_scrolling_view_behavior" />--> <!-- <com.google.android.material.appbar.AppBarLayout--> <!-- android:id="@+id/app_bar_layout"--> <!-- android:layout_width="match_parent"--> <!-- android:layout_height="wrap_content"--> <!-- android:fitsSystemWindows="true"--> <!-- android:theme="@style/Theme.Sunflower.AppBarOverlay">--> <!-- AppBarLayout contents here --> <!-- </com.google.android.material.appbar.AppBarLayout>--> <!-- </androidx.coordinatorlayout.widget.CoordinatorLayout>--> <androidx.compose.ui.platform.ComposeView android:id="@+id/compose_view" android:layout_width="match_parent" android:layout_height="match_parent" />
अपने फ़्रैगमेंट या गतिविधि में, अभी जोड़े गए
ComposeView
का रेफ़रंस पाएं और उस परsetContent
तरीके को कॉल करें. तरीके के मुख्य हिस्से में,Scaffold
को कॉन्टेंट के तौर पर सेट करें:composeView.setContent { Scaffold(Modifier.fillMaxSize()) { contentPadding -> // Scaffold contents // ... } }
अपने
Scaffold
के कॉन्टेंट में, अपनी स्क्रीन का मुख्य कॉन्टेंट शामिल करें. ऊपर दिए गए एक्सएमएल में मुख्य कॉन्टेंटViewPager2
है. इसलिए, हमHorizontalPager
का इस्तेमाल करेंगे, जो Compose में इसके बराबर है.Scaffold
केcontent
लैम्डा कोPaddingValues
का एक इंस्टेंस भी मिलता है, जिसे कॉन्टेंट रूट पर लागू किया जाना चाहिए.Modifier.padding
का इस्तेमाल करके,HorizontalPager
पर वहीPaddingValues
लागू किया जा सकता है.composeView.setContent { Scaffold(Modifier.fillMaxSize()) { contentPadding -> val pagerState = rememberPagerState { 10 } HorizontalPager( state = pagerState, modifier = Modifier.padding(contentPadding) ) { /* Page contents */ } } }
Scaffold
की ओर से उपलब्ध कराए गए अन्य कॉन्टेंट स्लॉट का इस्तेमाल करके, स्क्रीन पर ज़्यादा एलिमेंट जोड़ें. साथ ही, बच्चों के लिए बने बाकी व्यू माइग्रेट करें.topBar
स्लॉट का इस्तेमाल करके,TopAppBar
जोड़ा जा सकता है. साथ ही,floatingActionButton
स्लॉट का इस्तेमाल करके,FloatingActionButton
दिया जा सकता है.composeView.setContent { Scaffold( Modifier.fillMaxSize(), topBar = { TopAppBar( title = { Text("My App") } ) }, floatingActionButton = { FloatingActionButton( onClick = { /* Handle click */ } ) { Icon( Icons.Filled.Add, contentDescription = "Add Button" ) } } ) { contentPadding -> val pagerState = rememberPagerState { 10 } HorizontalPager( state = pagerState, modifier = Modifier.padding(contentPadding) ) { /* Page contents */ } } }
इस्तेमाल के सामान्य उदाहरण
टूलबार को छोटा और बड़ा करना
व्यू सिस्टम में, टूलबार को छोटा और बड़ा करने के लिए CoordinatorLayout
का इस्तेमाल किया जाता है. इसके लिए, टूलबार के कंटेनर के तौर पर AppBarLayout
का इस्तेमाल किया जाता है. इसके बाद, एक्सएमएल में layout_behavior
के ज़रिए Behavior
तय किया जा सकता है. ऐसा, स्क्रोल किए जा सकने वाले व्यू (जैसे कि RecyclerView
या NestedScrollView
) पर किया जा सकता है. इससे यह तय किया जा सकता है कि स्क्रोल करने पर टूलबार कैसे छोटा/बड़ा होगा.
'लिखें' में, TopAppBarScrollBehavior
का इस्तेमाल करके, इसी तरह का इफ़ेक्ट पाया जा सकता है. उदाहरण के लिए, अगर आपको छोटा/बड़ा होने वाला टूलबार लागू करना है, ताकि ऊपर की ओर स्क्रोल करने पर टूलबार दिखे, तो यह तरीका अपनाएं:
TopAppBarScrollBehavior
बनाने के लिए,TopAppBarDefaults.enterAlwaysScrollBehavior()
को कॉल करें.- बनाया गया
TopAppBarScrollBehavior
,TopAppBar
को दें. Scaffold
परModifier.nestedScroll
के ज़रिएNestedScrollConnection
को कनेक्ट करें, ताकि स्क्रोल किए जा सकने वाले कॉन्टेंट के ऊपर/नीचे स्क्रोल होने पर, Scaffold को नेस्ट किए गए स्क्रोल इवेंट मिल सकें. इस तरह, कॉन्टेंट स्क्रोल होने पर, ऐप्लिकेशन बार को सही तरीके से छोटा/बड़ा किया जा सकता है.// 1. Create the TopAppBarScrollBehavior val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior() Scaffold( topBar = { TopAppBar( title = { Text("My App") }, // 2. Provide scrollBehavior to TopAppBar scrollBehavior = scrollBehavior ) }, // 3. Connect the scrollBehavior.nestedScrollConnection to the Scaffold modifier = Modifier .fillMaxSize() .nestedScroll(scrollBehavior.nestedScrollConnection) ) { contentPadding -> /* Contents */ // ... }
स्क्रोल करने पर दिखने वाले कॉन्टेंट के छोटा/बड़ा होने के इफ़ेक्ट को पसंद के मुताबिक बनाना
enterAlwaysScrollBehavior
के लिए कई पैरामीटर दिए जा सकते हैं, ताकि
कोलैप्स/एक्सपैंड करने वाले ऐनिमेशन इफ़ेक्ट को पसंद के मुताबिक बनाया जा सके. TopAppBarDefaults
में अन्य TopAppBarScrollBehavior
भी शामिल हैं. जैसे, exitUntilCollapsedScrollBehavior
. यह सिर्फ़ तब ऐप्लिकेशन बार को बड़ा करता है, जब कॉन्टेंट को पूरी तरह से नीचे की ओर स्क्रोल किया जाता है.
पूरी तरह से कस्टम इफ़ेक्ट (उदाहरण के लिए, पैरलैक्स इफ़ेक्ट) बनाने के लिए, अपने हिसाब से NestedScrollConnection
भी बनाया जा सकता है. इसके अलावा, कॉन्टेंट स्क्रोल होने पर टूलबार को मैन्युअल तरीके से ऑफ़सेट किया जा सकता है. कोड के उदाहरण के लिए, AOSP पर नेस्ट किए गए स्क्रोल का सैंपल देखें.
दराज़
Views की मदद से, नेविगेशन ड्रॉअर को लागू किया जाता है. इसके लिए, DrawerLayout
को रूट व्यू के तौर पर इस्तेमाल किया जाता है. इस तरह, आपका CoordinatorLayout
, DrawerLayout
का चाइल्ड व्यू है. DrawerLayout
में एक और चाइल्ड व्यू भी होता है, जैसे कि NavigationView
. इसका इस्तेमाल, ड्रॉअर में नेविगेशन के विकल्प दिखाने के लिए किया जाता है.
Compose में, ModalNavigationDrawer
कंपोज़ेबल का इस्तेमाल करके, नेविगेशन ड्रॉअर लागू किया जा सकता है. ModalNavigationDrawer
, ड्रॉअर के लिए drawerContent
स्लॉट और स्क्रीन के कॉन्टेंट के लिए content
स्लॉट उपलब्ध कराता है.
ModalNavigationDrawer( drawerContent = { ModalDrawerSheet { Text("Drawer title", modifier = Modifier.padding(16.dp)) HorizontalDivider() NavigationDrawerItem( label = { Text(text = "Drawer Item") }, selected = false, onClick = { /*TODO*/ } ) // ...other drawer items } } ) { Scaffold(Modifier.fillMaxSize()) { contentPadding -> // Scaffold content // ... } }
ज़्यादा जानने के लिए, ड्रॉवर देखें.
स्नैकबार
Scaffold
एक snackbarHost
स्लॉट उपलब्ध कराता है. इसमें SnackbarHost
कंपोज़ेबल को स्वीकार किया जा सकता है, ताकि Snackbar
को दिखाया जा सके.
val scope = rememberCoroutineScope() val snackbarHostState = remember { SnackbarHostState() } Scaffold( snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, floatingActionButton = { ExtendedFloatingActionButton( text = { Text("Show snackbar") }, icon = { Icon(Icons.Filled.Image, contentDescription = "") }, onClick = { scope.launch { snackbarHostState.showSnackbar("Snackbar") } } ) } ) { contentPadding -> // Screen content // ... }
ज़्यादा जानने के लिए, स्नैकबार देखें.
ज़्यादा जानें
CoordinatorLayout
को Compose में माइग्रेट करने के बारे में ज़्यादा जानने के लिए, यहां दिए गए संसाधन देखें:
- मटीरियल कॉम्पोनेंट और लेआउट: Compose में काम करने वाले Material Design कॉम्पोनेंट के बारे में दस्तावेज़. जैसे,
Scaffold
. - Sunflower को Jetpack Compose पर माइग्रेट करना: यह एक ब्लॉग पोस्ट है. इसमें Sunflower सैंपल ऐप्लिकेशन को Views से Compose पर माइग्रेट करने की प्रोसेस के बारे में बताया गया है. इसमें
CoordinatorLayout
शामिल है.
आपके लिए सुझाव
- ध्यान दें: JavaScript बंद होने पर लिंक टेक्स्ट दिखता है
- मटीरियल कॉम्पोनेंट और लेआउट
- Compose में विंडो इनसेट
- Scroll