pref: Pad 上更改为居中弹窗

This commit is contained in:
HuanCheng65 2023-10-05 00:05:08 +08:00
parent 884218b50c
commit 46a42746dc
No known key found for this signature in database
GPG Key ID: 5EC9DD60A32C7360
2 changed files with 38 additions and 2 deletions

View File

@ -40,9 +40,12 @@ import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import com.huanchengfly.tieba.post.R import com.huanchengfly.tieba.post.R
import com.huanchengfly.tieba.post.arch.BaseComposeActivity.Companion.LocalWindowSizeClass
import com.huanchengfly.tieba.post.ui.common.theme.compose.ExtendedTheme import com.huanchengfly.tieba.post.ui.common.theme.compose.ExtendedTheme
import com.huanchengfly.tieba.post.ui.common.windowsizeclass.WindowWidthSizeClass
import com.huanchengfly.tieba.post.ui.widgets.compose.dialogs.AnyPopDialog import com.huanchengfly.tieba.post.ui.widgets.compose.dialogs.AnyPopDialog
import com.huanchengfly.tieba.post.ui.widgets.compose.dialogs.AnyPopDialogProperties import com.huanchengfly.tieba.post.ui.widgets.compose.dialogs.AnyPopDialogProperties
import com.huanchengfly.tieba.post.ui.widgets.compose.dialogs.DirectionState
import com.huanchengfly.tieba.post.ui.widgets.compose.picker.TimePicker import com.huanchengfly.tieba.post.ui.widgets.compose.picker.TimePicker
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -340,6 +343,7 @@ fun Dialog(
isActiveClose = true isActiveClose = true
}, },
) )
val windowWidthSizeClass = LocalWindowSizeClass.current.widthSizeClass
AnyPopDialog( AnyPopDialog(
isActiveClose = isActiveClose, isActiveClose = isActiveClose,
onDismiss = { onDismiss = {
@ -348,13 +352,24 @@ fun Dialog(
showDialog = false showDialog = false
}, },
properties = AnyPopDialogProperties( properties = AnyPopDialogProperties(
direction = if (windowWidthSizeClass == WindowWidthSizeClass.Compact) {
DirectionState.BOTTOM
} else {
DirectionState.CENTER
},
dismissOnBackPress = cancelable, dismissOnBackPress = cancelable,
dismissOnClickOutside = cancelableOnTouchOutside dismissOnClickOutside = cancelableOnTouchOutside
) )
) { ) {
Column( Column(
modifier = modifier modifier = modifier
.fillMaxWidth() .fillMaxWidth(
fraction = if (windowWidthSizeClass == WindowWidthSizeClass.Compact) {
1f
} else {
0.6f
}
)
.padding(16.dp) .padding(16.dp)
.background( .background(
color = ExtendedTheme.colors.windowBackground, color = ExtendedTheme.colors.windowBackground,

View File

@ -9,8 +9,13 @@ import android.view.WindowManager
import androidx.activity.compose.BackHandler import androidx.activity.compose.BackHandler
import androidx.compose.animation.Animatable import androidx.compose.animation.Animatable
import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.Spring
import androidx.compose.animation.core.spring
import androidx.compose.animation.core.tween import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut import androidx.compose.animation.fadeOut
import androidx.compose.animation.scaleIn
import androidx.compose.animation.scaleOut
import androidx.compose.animation.slideInHorizontally import androidx.compose.animation.slideInHorizontally
import androidx.compose.animation.slideInVertically import androidx.compose.animation.slideInVertically
import androidx.compose.animation.slideOutHorizontally import androidx.compose.animation.slideOutHorizontally
@ -136,6 +141,7 @@ private fun DialogFullScreen(
DirectionState.TOP -> Alignment.TopCenter DirectionState.TOP -> Alignment.TopCenter
DirectionState.LEFT -> Alignment.CenterStart DirectionState.LEFT -> Alignment.CenterStart
DirectionState.RIGHT -> Alignment.CenterEnd DirectionState.RIGHT -> Alignment.CenterEnd
DirectionState.CENTER -> Alignment.Center
else -> Alignment.BottomCenter else -> Alignment.BottomCenter
} }
) { ) {
@ -155,12 +161,26 @@ private fun DialogFullScreen(
DirectionState.TOP -> slideInVertically(initialOffsetY = { -it }) DirectionState.TOP -> slideInVertically(initialOffsetY = { -it })
DirectionState.LEFT -> slideInHorizontally(initialOffsetX = { -it }) DirectionState.LEFT -> slideInHorizontally(initialOffsetX = { -it })
DirectionState.RIGHT -> slideInHorizontally(initialOffsetX = { it }) DirectionState.RIGHT -> slideInHorizontally(initialOffsetX = { it })
DirectionState.CENTER -> fadeIn(
animationSpec = spring(stiffness = Spring.StiffnessMediumLow)
) + scaleIn(
animationSpec = spring(stiffness = Spring.StiffnessMediumLow),
initialScale = 0.8F
)
else -> slideInVertically(initialOffsetY = { it }) else -> slideInVertically(initialOffsetY = { it })
}, },
exit = when (properties.direction) { exit = when (properties.direction) {
DirectionState.TOP -> fadeOut() + slideOutVertically(targetOffsetY = { -it }) DirectionState.TOP -> fadeOut() + slideOutVertically(targetOffsetY = { -it })
DirectionState.LEFT -> fadeOut() + slideOutHorizontally(targetOffsetX = { -it }) DirectionState.LEFT -> fadeOut() + slideOutHorizontally(targetOffsetX = { -it })
DirectionState.RIGHT -> fadeOut() + slideOutHorizontally(targetOffsetX = { it }) DirectionState.RIGHT -> fadeOut() + slideOutHorizontally(targetOffsetX = { it })
DirectionState.CENTER -> fadeOut(
animationSpec = spring(stiffness = Spring.StiffnessMediumLow)
) + scaleOut(
animationSpec = spring(stiffness = Spring.StiffnessMediumLow),
targetScale = 0.8F
)
else -> fadeOut() + slideOutVertically(targetOffsetY = { it }) else -> fadeOut() + slideOutVertically(targetOffsetY = { it })
} }
) { ) {
@ -251,7 +271,8 @@ enum class DirectionState {
TOP, TOP,
LEFT, LEFT,
RIGHT, RIGHT,
BOTTOM BOTTOM,
CENTER
} }
private fun Modifier.clickOutSideModifier( private fun Modifier.clickOutSideModifier(