Apply consistent formatting: import ordering, line wrapping, indentation, and XML normalization. No functional changes. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
80 lines
2.8 KiB
Kotlin
80 lines
2.8 KiB
Kotlin
package plus.rua.project.ui
|
||
|
||
import androidx.compose.animation.AnimatedContent
|
||
import androidx.compose.animation.core.tween
|
||
import androidx.compose.animation.fadeIn
|
||
import androidx.compose.animation.fadeOut
|
||
import androidx.compose.animation.slideInVertically
|
||
import androidx.compose.animation.slideOutVertically
|
||
import androidx.compose.animation.togetherWith
|
||
import androidx.compose.foundation.layout.Row
|
||
import androidx.compose.foundation.layout.Spacer
|
||
import androidx.compose.foundation.layout.fillMaxWidth
|
||
import androidx.compose.foundation.layout.padding
|
||
import androidx.compose.foundation.layout.width
|
||
import androidx.compose.material3.MaterialTheme
|
||
import androidx.compose.material3.Text
|
||
import androidx.compose.runtime.Composable
|
||
import androidx.compose.ui.Alignment
|
||
import androidx.compose.ui.Modifier
|
||
import androidx.compose.ui.unit.dp
|
||
|
||
/**
|
||
* 月份标题栏,显示"年月"文字和 ISO 周号。
|
||
*
|
||
* @param year 年份
|
||
* @param month 月份(1-12)
|
||
* @param weekNumber 当前 ISO 周号
|
||
* @param modifier 外部布局修饰符
|
||
*/
|
||
@Composable
|
||
fun MonthHeader(
|
||
year: Int,
|
||
month: Int,
|
||
weekNumber: Int,
|
||
modifier: Modifier = Modifier
|
||
) {
|
||
Row(
|
||
modifier = modifier
|
||
.fillMaxWidth()
|
||
.padding(vertical = 14.dp, horizontal = 12.dp),
|
||
verticalAlignment = Alignment.CenterVertically
|
||
) {
|
||
AnimatedContent(
|
||
targetState = Pair(year, month),
|
||
transitionSpec = {
|
||
if (targetState.second > initialState.second) {
|
||
slideInVertically(tween(250)) { -it } + fadeIn(tween(250)) togetherWith
|
||
slideOutVertically(tween(250)) { it } + fadeOut(tween(250))
|
||
} else {
|
||
slideInVertically(tween(250)) { it } + fadeIn(tween(250)) togetherWith
|
||
slideOutVertically(tween(250)) { -it } + fadeOut(tween(250))
|
||
}
|
||
}
|
||
) { (y, m) ->
|
||
Text(
|
||
text = "${y}年${m}月",
|
||
style = MaterialTheme.typography.titleLarge
|
||
)
|
||
}
|
||
Spacer(modifier = Modifier.width(6.dp))
|
||
AnimatedContent(
|
||
targetState = weekNumber,
|
||
transitionSpec = {
|
||
if (targetState > initialState) {
|
||
slideInVertically(tween(250)) { -it } + fadeIn(tween(250)) togetherWith
|
||
slideOutVertically(tween(250)) { it } + fadeOut(tween(250))
|
||
} else {
|
||
slideInVertically(tween(250)) { it } + fadeIn(tween(250)) togetherWith
|
||
slideOutVertically(tween(250)) { -it } + fadeOut(tween(250))
|
||
}
|
||
}
|
||
) { week ->
|
||
Text(
|
||
text = "第${week}周",
|
||
style = MaterialTheme.typography.bodySmall
|
||
)
|
||
}
|
||
}
|
||
}
|