navigation-compose
নির্ভরতার সাথে ভাগ করা উপাদানগুলি ব্যবহার করতে, Modifier.sharedElement()
ব্যবহার করুন যা একটি প্যারামিটার হিসাবে একটি AnimatedVisibilityScope
স্কোপ নেয়। কি দৃশ্যমান হবে এবং কখন হবে তা নির্ধারণ করতে আপনি এটি ব্যবহার করতে পারেন।
ভাগ করা উপাদানগুলির সাথে navigation-compose
ব্যবহারের একটি উদাহরণ নিম্নলিখিত:
@Preview @Composable fun SharedElement_PredictiveBack() { SharedTransitionLayout { val navController = rememberNavController() NavHost( navController = navController, startDestination = "home" ) { composable("home") { HomeScreen( this@SharedTransitionLayout, this@composable, { navController.navigate("details/$it") } ) } composable( "details/{item}", arguments = listOf(navArgument("item") { type = NavType.IntType }) ) { backStackEntry -> val id = backStackEntry.arguments?.getInt("item") val snack = listSnacks[id!!] DetailsScreen( id, snack, this@SharedTransitionLayout, this@composable, { navController.navigate("home") } ) } } } } @Composable fun DetailsScreen( id: Int, snack: Snack, sharedTransitionScope: SharedTransitionScope, animatedContentScope: AnimatedContentScope, onBackPressed: () -> Unit ) { with(sharedTransitionScope) { Column( Modifier .fillMaxSize() .clickable { onBackPressed() } ) { Image( painterResource(id = snack.image), contentDescription = snack.description, contentScale = ContentScale.Crop, modifier = Modifier .sharedElement( sharedTransitionScope.rememberSharedContentState(key = "image-$id"), animatedVisibilityScope = animatedContentScope ) .aspectRatio(1f) .fillMaxWidth() ) Text( snack.name, fontSize = 18.sp, modifier = Modifier .sharedElement( sharedTransitionScope.rememberSharedContentState(key = "text-$id"), animatedVisibilityScope = animatedContentScope ) .fillMaxWidth() ) } } } @Composable fun HomeScreen( sharedTransitionScope: SharedTransitionScope, animatedContentScope: AnimatedContentScope, onItemClick: (Int) -> Unit, ) { LazyColumn( modifier = Modifier .fillMaxSize() .padding(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp) ) { itemsIndexed(listSnacks) { index, item -> Row( Modifier.clickable { onItemClick(index) } ) { Spacer(modifier = Modifier.width(8.dp)) with(sharedTransitionScope) { Image( painterResource(id = item.image), contentDescription = item.description, contentScale = ContentScale.Crop, modifier = Modifier .sharedElement( sharedTransitionScope.rememberSharedContentState(key = "image-$index"), animatedVisibilityScope = animatedContentScope ) .size(100.dp) ) Spacer(modifier = Modifier.width(8.dp)) Text( item.name, fontSize = 18.sp, modifier = Modifier .align(Alignment.CenterVertically) .sharedElement( sharedTransitionScope.rememberSharedContentState(key = "text-$index"), animatedVisibilityScope = animatedContentScope, ) ) } } } } } data class Snack( val name: String, val description: String, @DrawableRes val image: Int )
ভাগ করা উপাদান সহ ভবিষ্যদ্বাণীপূর্ণ ফিরে
ভাগ করা উপাদানগুলির সাথে ভবিষ্যদ্বাণীমূলক ব্যাক ব্যবহার করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
পূর্ববর্তী বিভাগ থেকে স্নিপেট ব্যবহার করে সর্বশেষ
navigation-compose
নির্ভরতা ব্যবহার করুন।dependencies { def nav_version = "2.8.0-beta02" implementation "androidx.navigation:navigation-compose:$nav_version" }
বিকাশকারী বিকল্পগুলিতে পূর্বাভাসমূলক ব্যাক সেটিং সক্ষম করুন।
আপনার
AndroidManifest.xml
ফাইলেandroid:enableOnBackInvokedCallback="true"
যোগ করুন:<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:enableOnBackInvokedCallback="true" android:theme="@style/Theme.Snippets">