Как дать коробку полный доступный размер внутри вложенной навигационной навигации (место, где расположены все экраны)?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как дать коробку полный доступный размер внутри вложенной навигационной навигации (место, где расположены все экраны)?

Сообщение Anonymous »

У меня есть на главном экране, эта часть кода < /p>
CompositionLocalProvider(LocalAvailableHeight provides availableHeight) {

Box(
modifier = Modifier
.fillMaxSize()
.windowInsetsPadding(WindowInsets.navigationBars)
) {
// Контент
Column(
modifier = Modifier
.fillMaxSize()
.nestedScroll(nestedScrollConnection)
.background(Color.Transparent)
.verticalScroll(scrollState),
) {
// отступ сверху учитывая размеры верхней панельки TopBar
Spacer(
modifier = Modifier.height(with(density){maxTopHeightSpacer.toDp()} )
)

if (!LocalInspectionMode.current && navHostController != null) {
NestedNavigationMain(navHostController)
} else {
var state: FilmHubState by remember { mutableStateOf(FilmHubState()) }

FilmHubContent(state = state)
}

// отступ оставляем только на тех экранах которые имеют навигационную панельку снизу
when (currentRoute) {
FilmHub::class.qualifiedName, Favorite::class.qualifiedName, Menu::class.qualifiedName,
Search::class.qualifiedName, Profile::class.qualifiedName -> {
// отступ снизу учитывая размеры нижней навигационной панельки (FabBottomBar)
Spacer(
modifier = Modifier
.height(barHeight + floatingButtonHeight + (subFabCentralPadding * animFabSpace.value))
)
}

Info::class.qualifiedName -> {
// отступ под плавающую кнопку боковую
Spacer(modifier = Modifier.fillMaxWidth().height(40.dp))
}
else -> {
// не знаю как это влияет, но при добавлении пустого спейсера снизу под каждый экран фиксит баг ТопБара что он немного прокручивается вниз
// scrollTo перестает при первом рендере экрана прокручивать, если убрать топ бар немного опустится вниз и будет видно что страница немного прокрутилась вниз и это при открытии нового экрана
Spacer(modifier = Modifier.fillMaxWidth().height(4.dp))
}
}
}
< /code>
И у меня есть экран, который заменяет indestnavigationmain < /p>
@Composable
fun FavoriteContent(
modifier: Modifier = Modifier,
state: FavoriteState,
country: ECountry = ECountry.UnitedStates,
openInfoMovie: (String, ECountry?, String) -> Unit = {movieId, countryDisplay, author ->},
loadMoreFavoriteFilms: () -> Unit = {},
) {
if (state.favoriteMovieList != null) {
MovieVerticalGrid(
modifier = modifier.heightIn(max = LocalAvailableHeight.current).fillMaxWidth(),
paddingValues = PaddingValues(horizontal = 40.dp),
isLoading = state.favoriteMovieList.isLoading,
endReached = state.favoriteMovieList.endReached,
movieList = state.favoriteMovieList.paginationData.values.toList(),
onItemClicked = {
with(state.favoriteMovieList.paginationData.entries.elementAt(it).value) {
openInfoMovie(this.id, this.countryDisplay, this.author)
}
},
loadMoreFilms = loadMoreFavoriteFilms,
)
} else {
Box(
modifier = Modifier
.fillMaxSize()
.background(Color.Green),
contentAlignment = Alignment.Center
) {
Text(
modifier = Modifier.width(300.dp),
text = stringResource(R.string.favorite_screen_text_info_no_favorite, country),
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.primary,
textAlign = TextAlign.Center
)
}
}
}
< /code>
Как добавить для полного размера блока? Когда у меня есть основная колонка с вертикалью. И у меня есть Inside MovieVerticleGrid -> LazyVerticalGrid, который дает сбою, если я добавляю Intrinsicize.max для высоты внешнего столбца. Потому что, если я достигаю этой цели, чтобы сделать полным пространством для коробки, то я могу поместить свой текст в центр внутри коробки < /p>
.fillmaxsize () также не поможет, если я не использую Intrinsicize.max < /p>
Box(
modifier = Modifier
.fillMaxSize()
.background(Color.Green),
contentAlignment = Alignment.Center
) {
< /code>
И расположение для столбца, а не мое решение, потому что я не хочу для всего центра контента. И если я помесчу эту 2 строки, у меня есть сумка с централизованием контента, потому что сначала он загружен сверху, а затем примените централизовать. Может быть, это произошло, потому что я меняю Scrollstate для каждого экрана < /p>
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center


Подробнее здесь: https://stackoverflow.com/questions/797 ... ere-all-sc
Ответить

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

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

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

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

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