Как изменить ModalNavigationDrawer в Android TV с помощью Jetpack Compose?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как изменить ModalNavigationDrawer в Android TV с помощью Jetpack Compose?

Сообщение Anonymous »

Я создал приложение для Android TV с помощью Jetpack Compose, теперь у меня возникла проблема с ModalNavigationDrawer, мой собственный слишком широк, когда ящик расширяется, это мой код

Код: Выделить всё

class TVHomeActivity : ComponentActivity() {

var secureStorage: FlutterSecureStorage? = null
var socket: Socket? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

secureStorage = FlutterSecureStorage(this, emptyMap())
setSocketListener()

setContent {
MaterialTheme {
MainScreen()
}
}
}

@Composable
@Preview
private fun MainScreen() {
val navController = rememberNavController()
LocalContext.current
var selectedIndex by remember { mutableIntStateOf(0) }

val originalDensity = LocalDensity.current
val requiredContainerWidth = 500.dp
(requiredContainerWidth * originalDensity.density / 360.dp.value) + 1.dp

val items = listOf(
NavigationItem("Live TV", "live_tv", Icons.Default.LiveTv),
NavigationItem("Movies", "movies", Icons.Default.Movie),
NavigationItem("Games", "games", Icons.Default.Games),
NavigationItem("Settings", "settings", Icons.Default.Settings),
)
ModalNavigationDrawer(
scrimBrush = Brush.horizontalGradient(
colors = listOf(Color.Black, Color.Transparent),
// Perkecil jangkauan gradasi karena drawer sekarang lebih pendek
),
drawerState = rememberDrawerState(initialValue = DrawerValue.Closed),
drawerContent = {
val isClosed = it == DrawerValue.Closed
Column(
modifier = Modifier
.fillMaxHeight()
.selectableGroup()
) {

Spacer(modifier = Modifier.weight(1f))
items.forEachIndexed { index, item ->

NavigationDrawerItem(
modifier = Modifier.padding(
vertical = 10.dp,
horizontal = 4.dp
),
selected = selectedIndex == index,
onClick = {
selectedIndex = index
when (item.route) {
"games" -> {

}

else ->  {
navController.navigate(item.route) {
popUpTo(navController.graph.startDestinationId)
launchSingleTop = true
}
}
}
},
shape = NavigationDrawerItemDefaults.shape(RoundedCornerShape(12.dp)),
colors = NavigationDrawerItemDefaults.colors(
contentColor = Color.White,
focusedContentColor = Color.White,
selectedContentColor = Color.White,
inactiveContentColor = Color.White,
),
content = {
if (!isClosed) {
Text(
text = item.title,
style = MaterialTheme.typography.titleSmall
)
}
},
leadingContent = {
Icon(
imageVector = item.icon,
contentDescription = null,
)
}
)

if (index == items.size - 2) {
Spacer(modifier = Modifier.weight(1f))
}
}

}

}
) {
Box(modifier = Modifier.fillMaxSize()) {
NavHost(
navController = navController,
startDestination = "live_tv" // Default screen saat dibuka
) {
// Route ke file baru
composable("live_tv") {
LiveTVScreen()
}

composable("movies") { PlaceholderScreen("Movies Content") }
composable("settings") { PlaceholderScreen("Settings Screen") }
}
}
}

}

@Composable
fun PlaceholderScreen(title: String) {
Box(Modifier.fillMaxSize().padding(start = 80.dp), contentAlignment = Alignment.Center) {
Text(text = title, style = MaterialTheme.typography.displayMedium)
}
}

private fun setSocketListener() {

}
}

data class NavigationItem(val title: String, val route: String, val icon: ImageVector)
Я попробовал изменить столбец внутри drawerContent

с помощью add
fillMaxWidth(0.3f) OR width(250.dp) OR requireWidth(250.dp)
не работает, пожалуйста, помогите и большое спасибо
Изображение

Изображение


Подробнее здесь: https://stackoverflow.com/questions/798 ... ck-compose
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»