diff --git a/app/shared/ui-comment/src/commonMain/kotlin/ui/comment/CommentColumn.kt b/app/shared/ui-comment/src/commonMain/kotlin/ui/comment/CommentColumn.kt index f0f8f77213..a21d6ca188 100644 --- a/app/shared/ui-comment/src/commonMain/kotlin/ui/comment/CommentColumn.kt +++ b/app/shared/ui-comment/src/commonMain/kotlin/ui/comment/CommentColumn.kt @@ -16,6 +16,7 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyGridItemScope import androidx.compose.foundation.lazy.grid.LazyGridState @@ -28,6 +29,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.paging.compose.LazyPagingItems import androidx.paging.compose.itemContentType @@ -53,7 +55,8 @@ fun CommentColumn( contentPadding: PaddingValues = PaddingValues(0.dp), connectedScrollState: ConnectedScrollState? = null, state: LazyGridState = rememberLazyGridState(), - commentItem: @Composable LazyGridItemScope.(index: Int, item: UIComment) -> Unit + maxColumnWidth: Dp = Dp.Unspecified, + commentItem: @Composable LazyGridItemScope.(index: Int, item: UIComment) -> Unit, ) { PullToRefreshBox( isRefreshing = items.isLoadingFirstPageOrRefreshing, @@ -90,15 +93,24 @@ fun CommentColumn( key = items.itemKey { "CommentColumn-" + it.id }, contentType = items.itemContentType(), ) { index -> - Column { - val item = items[index] ?: return@items - commentItem(index, item) + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.Center, + ) { + Column( + modifier = Modifier + .widthIn(max = maxColumnWidth) + .fillMaxWidth(), + ) { + val item = items[index] ?: return@items + commentItem(index, item) - if (hasDividerLine && index != items.itemCount - 1) { - HorizontalDivider( - modifier = Modifier.fillMaxWidth(), - color = DividerDefaults.color.stronglyWeaken(), - ) + if (hasDividerLine && index != items.itemCount - 1) { + HorizontalDivider( + modifier = Modifier.fillMaxWidth(), + color = DividerDefaults.color.stronglyWeaken(), + ) + } } } } diff --git a/app/shared/ui-subject/src/commonMain/kotlin/ui/subject/details/SubjectDetailsPage.kt b/app/shared/ui-subject/src/commonMain/kotlin/ui/subject/details/SubjectDetailsPage.kt index 5e089d8765..d6cb3aa080 100644 --- a/app/shared/ui-subject/src/commonMain/kotlin/ui/subject/details/SubjectDetailsPage.kt +++ b/app/shared/ui-subject/src/commonMain/kotlin/ui/subject/details/SubjectDetailsPage.kt @@ -354,7 +354,8 @@ private fun SubjectDetailsPage( relatedSubjects = state.relatedSubjectsPager.collectAsLazyPagingItemsWithLifecycle(), Modifier .nestedScrollWorkaround(state.detailsTabLazyListState, connectedScrollState) - .nestedScroll(connectedScrollState.nestedScrollConnection), + .nestedScroll(connectedScrollState.nestedScrollConnection) + .fillMaxWidth(), state.detailsTabLazyListState, contentPadding = contentPadding, ) @@ -385,10 +386,6 @@ private fun SubjectDetailsPage( } } }, - Modifier - .fillMaxWidth() - .wrapContentWidth(align = Alignment.CenterHorizontally) - .widthIn(max = MaximumContentWidth), ) } } diff --git a/app/shared/ui-subject/src/commonMain/kotlin/ui/subject/details/components/DetailsTab.kt b/app/shared/ui-subject/src/commonMain/kotlin/ui/subject/details/components/DetailsTab.kt index e5713a3cef..e5d2bdd660 100644 --- a/app/shared/ui-subject/src/commonMain/kotlin/ui/subject/details/components/DetailsTab.kt +++ b/app/shared/ui-subject/src/commonMain/kotlin/ui/subject/details/components/DetailsTab.kt @@ -25,6 +25,7 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.statusBarsPadding +import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListState @@ -134,23 +135,32 @@ fun SubjectDetailsDefaults.DetailsTab( horizontalPadding: Dp = currentWindowAdaptiveInfo1().windowSizeClass.paneHorizontalPadding, contentPadding: PaddingValues = PaddingValues(0.dp), ) { + + fun Modifier.limitContentWidthAndApplyPadding() = this + .widthIn(max = MaximumContentWidth) + .fillMaxWidth() + .padding(horizontal = horizontalPadding) + LazyColumn( modifier, state = state, contentPadding = contentPadding, verticalArrangement = Arrangement.spacedBy(20.dp), // 这个页面内容比较密集, 如果用 16 显得有点拥挤 + horizontalAlignment = Alignment.CenterHorizontally, ) { item("spacer header") { } // 简介 item("description") { - Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { + Column( + modifier = Modifier.limitContentWidthAndApplyPadding(), + verticalArrangement = Arrangement.spacedBy(12.dp), + ) { SelectionContainer { var expanded by rememberSaveable { mutableStateOf(false) } Text( info.summary, - Modifier.fillMaxWidth().padding(horizontal = horizontalPadding) - .clickable { expanded = !expanded }, + Modifier.fillMaxWidth().clickable { expanded = !expanded }, style = MaterialTheme.typography.bodyMedium, maxLines = if (expanded) Int.MAX_VALUE else 5, // TODO: add animation overflow = TextOverflow.Ellipsis, @@ -160,7 +170,6 @@ fun SubjectDetailsDefaults.DetailsTab( TagsList( info, onClickTag, - Modifier.padding(horizontal = horizontalPadding), ) } } @@ -168,7 +177,7 @@ fun SubjectDetailsDefaults.DetailsTab( item("characters title") { Text( "角色", - Modifier.padding(horizontal = horizontalPadding), + Modifier.limitContentWidthAndApplyPadding(), style = MaterialTheme.typography.titleMedium, ) } @@ -182,7 +191,7 @@ fun SubjectDetailsDefaults.DetailsTab( if (totalCharactersCount == null) "角色" else "角色 $totalCharactersCount", ) }, - modifier = Modifier.padding(horizontal = horizontalPadding), + modifier = Modifier.limitContentWidthAndApplyPadding(), itemContent = { PersonCard(it) }, ) } @@ -190,7 +199,7 @@ fun SubjectDetailsDefaults.DetailsTab( item("staff title") { Text( "制作人员", - Modifier.padding(horizontal = horizontalPadding), + Modifier.limitContentWidthAndApplyPadding(), style = MaterialTheme.typography.titleMedium, ) } @@ -204,7 +213,7 @@ fun SubjectDetailsDefaults.DetailsTab( if (totalStaffCount == null) "制作人员" else "制作人员 $totalStaffCount", ) }, - modifier = Modifier.padding(horizontal = horizontalPadding), + modifier = Modifier.limitContentWidthAndApplyPadding(), itemContent = { PersonCard(it) }, ) } @@ -213,7 +222,7 @@ fun SubjectDetailsDefaults.DetailsTab( item("related subjects title") { Text( "关联条目", - Modifier.padding(horizontal = horizontalPadding), + Modifier.limitContentWidthAndApplyPadding(), style = MaterialTheme.typography.titleMedium, ) } @@ -233,7 +242,7 @@ fun SubjectDetailsDefaults.DetailsTab( ), ) }, - Modifier.padding(horizontal = horizontalPadding), + Modifier.limitContentWidthAndApplyPadding(), horizontalSpacing = horizontalPadding, verticalSpacing = horizontalPadding, ) diff --git a/app/shared/ui-subject/src/commonMain/kotlin/ui/subject/details/components/SubjectCommentColumn.kt b/app/shared/ui-subject/src/commonMain/kotlin/ui/subject/details/components/SubjectCommentColumn.kt index a8237d0f01..d37b4173e9 100644 --- a/app/shared/ui-subject/src/commonMain/kotlin/ui/subject/details/components/SubjectCommentColumn.kt +++ b/app/shared/ui-subject/src/commonMain/kotlin/ui/subject/details/components/SubjectCommentColumn.kt @@ -13,11 +13,9 @@ import androidx.compose.foundation.clickable import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.widthIn -import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.foundation.lazy.grid.LazyGridState import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.material3.Text @@ -54,14 +52,11 @@ fun SubjectDetailsDefaults.SubjectCommentColumn( Box(modifier, contentAlignment = Alignment.TopCenter) { CommentColumn( state.list.collectAsLazyPagingItemsWithLifecycle(), - modifier = Modifier - .fillMaxWidth() - .wrapContentWidth(align = Alignment.CenterHorizontally) - .widthIn(max = SubjectDetailsDefaults.MaximumContentWidth) - .fillMaxHeight(), + modifier = Modifier.fillMaxSize(), contentPadding = contentPadding, state = gridState, connectedScrollState = connectedScrollState, + maxColumnWidth = MaximumContentWidth, ) { _, comment -> SubjectComment( comment = comment, @@ -97,7 +92,7 @@ fun SubjectComment( } }, ) - + Comment( avatar = { CommentDefaults.Avatar(comment.author?.avatarUrl, authorModifier) }, primaryTitle = {