নেভিগেশন-কম্পোজ নির্ভরতার সাথে ভাগ করা উপাদানগুলি ব্যবহার করতে, আপনি পূর্বে দেখানো একই ধারণাগুলি ব্যবহার করতে পারেন: Modifier.sharedElement()
ব্যবহার করুন যা একটি AnimatedVisibilityScope
প্যারামিটার হিসাবে নেয়৷ কি দৃশ্যমান হবে এবং কখন হবে তা নির্ধারণ করতে আপনি এটি ব্যবহার করতে পারেন।
ভাগ করা উপাদানগুলির সাথে navigation-compose
ব্যবহারের একটি উদাহরণ নিম্নলিখিত:
@Preview
@Composable
fun SharedElement_PredictiveBack() {
SharedTransitionLayout {
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = "home"
) {
composable("home") {
HomeScreen(
navController,
this@SharedTransitionLayout,
this@composable
)
}
composable(
"details/{item}",
arguments = listOf(navArgument("item") { type = NavType.IntType })
) { backStackEntry ->
val id = backStackEntry.arguments?.getInt("item")
val snack = listSnacks[id!!]
DetailsScreen(
navController,
id,
snack,
this@SharedTransitionLayout,
this@composable
)
}
}
}
}
@Composable
private fun DetailsScreen(
navController: NavHostController,
id: Int,
snack: Snack,
sharedTransitionScope: SharedTransitionScope,
animatedContentScope: AnimatedContentScope
) {
with(sharedTransitionScope) {
Column(
Modifier
.fillMaxSize()
.clickable {
navController.navigate("home")
}
) {
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
private fun HomeScreen(
navController: NavHostController,
sharedTransitionScope: SharedTransitionScope,
animatedContentScope: AnimatedContentScope
) {
LazyColumn(
modifier = Modifier
.fillMaxSize()
.padding(8.dp),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
itemsIndexed(listSnacks) { index, item ->
Row(
Modifier.clickable {
navController.navigate("details/$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">
নেভিগেশন-কম্পোজ নির্ভরতার সাথে ভাগ করা উপাদানগুলি ব্যবহার করতে, আপনি পূর্বে দেখানো একই ধারণাগুলি ব্যবহার করতে পারেন: Modifier.sharedElement()
ব্যবহার করুন যা একটি AnimatedVisibilityScope
প্যারামিটার হিসাবে নেয়৷ কি দৃশ্যমান হবে এবং কখন হবে তা নির্ধারণ করতে আপনি এটি ব্যবহার করতে পারেন।
ভাগ করা উপাদানগুলির সাথে navigation-compose
ব্যবহারের একটি উদাহরণ নিম্নলিখিত:
@Preview
@Composable
fun SharedElement_PredictiveBack() {
SharedTransitionLayout {
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = "home"
) {
composable("home") {
HomeScreen(
navController,
this@SharedTransitionLayout,
this@composable
)
}
composable(
"details/{item}",
arguments = listOf(navArgument("item") { type = NavType.IntType })
) { backStackEntry ->
val id = backStackEntry.arguments?.getInt("item")
val snack = listSnacks[id!!]
DetailsScreen(
navController,
id,
snack,
this@SharedTransitionLayout,
this@composable
)
}
}
}
}
@Composable
private fun DetailsScreen(
navController: NavHostController,
id: Int,
snack: Snack,
sharedTransitionScope: SharedTransitionScope,
animatedContentScope: AnimatedContentScope
) {
with(sharedTransitionScope) {
Column(
Modifier
.fillMaxSize()
.clickable {
navController.navigate("home")
}
) {
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
private fun HomeScreen(
navController: NavHostController,
sharedTransitionScope: SharedTransitionScope,
animatedContentScope: AnimatedContentScope
) {
LazyColumn(
modifier = Modifier
.fillMaxSize()
.padding(8.dp),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
itemsIndexed(listSnacks) { index, item ->
Row(
Modifier.clickable {
navController.navigate("details/$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">
নেভিগেশন-কম্পোজ নির্ভরতার সাথে ভাগ করা উপাদানগুলি ব্যবহার করতে, আপনি পূর্বে দেখানো একই ধারণাগুলি ব্যবহার করতে পারেন: Modifier.sharedElement()
ব্যবহার করুন যা একটি AnimatedVisibilityScope
প্যারামিটার হিসাবে নেয়৷ কি দৃশ্যমান হবে এবং কখন হবে তা নির্ধারণ করতে আপনি এটি ব্যবহার করতে পারেন।
ভাগ করা উপাদানগুলির সাথে navigation-compose
ব্যবহারের একটি উদাহরণ নিম্নলিখিত:
@Preview
@Composable
fun SharedElement_PredictiveBack() {
SharedTransitionLayout {
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = "home"
) {
composable("home") {
HomeScreen(
navController,
this@SharedTransitionLayout,
this@composable
)
}
composable(
"details/{item}",
arguments = listOf(navArgument("item") { type = NavType.IntType })
) { backStackEntry ->
val id = backStackEntry.arguments?.getInt("item")
val snack = listSnacks[id!!]
DetailsScreen(
navController,
id,
snack,
this@SharedTransitionLayout,
this@composable
)
}
}
}
}
@Composable
private fun DetailsScreen(
navController: NavHostController,
id: Int,
snack: Snack,
sharedTransitionScope: SharedTransitionScope,
animatedContentScope: AnimatedContentScope
) {
with(sharedTransitionScope) {
Column(
Modifier
.fillMaxSize()
.clickable {
navController.navigate("home")
}
) {
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
private fun HomeScreen(
navController: NavHostController,
sharedTransitionScope: SharedTransitionScope,
animatedContentScope: AnimatedContentScope
) {
LazyColumn(
modifier = Modifier
.fillMaxSize()
.padding(8.dp),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
itemsIndexed(listSnacks) { index, item ->
Row(
Modifier.clickable {
navController.navigate("details/$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">
নেভিগেশন-কম্পোজ নির্ভরতার সাথে ভাগ করা উপাদানগুলি ব্যবহার করতে, আপনি পূর্বে দেখানো একই ধারণাগুলি ব্যবহার করতে পারেন: Modifier.sharedElement()
ব্যবহার করুন যা একটি AnimatedVisibilityScope
প্যারামিটার হিসাবে নেয়৷ কি দৃশ্যমান হবে এবং কখন হবে তা নির্ধারণ করতে আপনি এটি ব্যবহার করতে পারেন।
ভাগ করা উপাদানগুলির সাথে navigation-compose
ব্যবহারের একটি উদাহরণ নিম্নলিখিত:
@Preview
@Composable
fun SharedElement_PredictiveBack() {
SharedTransitionLayout {
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = "home"
) {
composable("home") {
HomeScreen(
navController,
this@SharedTransitionLayout,
this@composable
)
}
composable(
"details/{item}",
arguments = listOf(navArgument("item") { type = NavType.IntType })
) { backStackEntry ->
val id = backStackEntry.arguments?.getInt("item")
val snack = listSnacks[id!!]
DetailsScreen(
navController,
id,
snack,
this@SharedTransitionLayout,
this@composable
)
}
}
}
}
@Composable
private fun DetailsScreen(
navController: NavHostController,
id: Int,
snack: Snack,
sharedTransitionScope: SharedTransitionScope,
animatedContentScope: AnimatedContentScope
) {
with(sharedTransitionScope) {
Column(
Modifier
.fillMaxSize()
.clickable {
navController.navigate("home")
}
) {
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
private fun HomeScreen(
navController: NavHostController,
sharedTransitionScope: SharedTransitionScope,
animatedContentScope: AnimatedContentScope
) {
LazyColumn(
modifier = Modifier
.fillMaxSize()
.padding(8.dp),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
itemsIndexed(listSnacks) { index, item ->
Row(
Modifier.clickable {
navController.navigate("details/$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">