我的分数是3,Column.其中1st-Column的成分是2nd3rd-Column.在2nd-Column中,它里面有很多组件.在最后的3rd,Column,我有几个项目,我停留在屏幕的底部.我在这answer美元的帮助下做到了这一点.在较小的屏幕项目是落后的,所以我的主管提到,所有的项目将自动滚动到2nd Column,明显高于3rd Column.

@Composable
fun Xyz(){
    Theme {
        Column(
            modifier = Modifier
                .padding(dimensionResource(R.dimen.margin_screen_edge_sides))
                .fillMaxSize()
                .verticalScroll(rememberScrollState()),
//            verticalArrangement = Arrangement.Top
            or
//                verticalArrangement = Arrangement.Arrangement.SpaceBetween
        ) {
            Column(
                modifier = Modifier
                    .verticalScroll(rememberScrollState())
                    .weight(1f),
                horizontalAlignment = Alignment.CenterHorizontally,
            ) {
                // so many item in here.
               //  If here items is behind of 3rd column then automatically scroll the item when user land of this this screen
            }
            Column {
                Button()
                // may be more item in here
            }
        }
    }
}

Actual Output

enter image description here

Expected Output

Scenario 1

enter image description here

注意:-项目将在2nd Column增加,即我在AnimatedVisibility中添加了逻辑,所以当重组时,它将添加项目.

Scenario 2

3rdColumn后面没有任何物品时,我的屏幕将不会滚动任何内容

enter image description here

如果你有问题,请问我.非常感谢

UPDATE

@Composable
fun Xyz(){
    Theme {
        val scrollState = rememberScrollState()

        LaunchedEffect(
            keyOneIsTrue,
            keyTwoIsTrue
        ) {
            val newValue = scrollState.maxValue
            scrollState.animateScrollTo(newValue)
        }
        Column(
            modifier = Modifier
                .padding(dimensionResource(R.dimen.margin_screen_edge_sides))
                .fillMaxSize()
                .verticalScroll(rememberScrollState()),
//            verticalArrangement = Arrangement.Top
            or
//                verticalArrangement = Arrangement.Arrangement.SpaceBetween
        ) {
            Column(
                modifier = Modifier
                    .verticalScroll(scrollState)
                    .weight(1f),
                horizontalAlignment = Alignment.CenterHorizontally,
            ) {
                // so many item in here.
                //  If here items is behind of 3rd column then automatically scroll the item when user land of this this screen
            }
            Column {
                Button()
                // may be more item in here
            }
        }
    }
}

我有这么多的keys,但我在我的LaunchedEffect中给你举的例子很少.当为keyOneIsTrue时,它进入LaunchedEffect,然后newValue总是返回0值.在keyTwoIsTrue中也发生了同样的情况,什么都不会滚动:

Note当任何键更改时,意味着我正在通过AnimatedVisibility更改2nd Column中项目的可见性

UPDATE 2

我正在添加实时示例,这是自动滚动不工作时,项目被添加到列表中.

@Preview(showBackground = true, widthDp = 250, heightDp = 320)
@Composable
fun Xyz() {
    Theme {
        var itemClicked by remember { mutableStateOf(0) }
        val favourites = remember { mutableStateListOf<String>() }
        val scrollState = rememberScrollState()
        LaunchedEffect(favourites.size > 0) {
            scrollState.animateScrollTo(scrollState.maxValue)
        }
        Column(
            modifier = Modifier
                .padding(dimensionResource(R.dimen.margin_screen_edge_sides))
                .fillMaxSize()
                .verticalScroll(rememberScrollState()),
        ) {
            Column(
                modifier = Modifier
                    .verticalScroll(scrollState)
                    .weight(1f),
                horizontalAlignment = Alignment.CenterHorizontally,
            ) {
                favourites.forEach { text ->
                    Text(
                        text = text,
                        fontSize = 30.sp,
                        color = Red
                    )
                }
            }
            Column {
                Button(onClick = {
                    itemClicked++
                    favourites.add("item clicked $itemClicked")
                }) {
                    Text(text = "Add me")
                }
            }
        }
    }
}

你可以在video中清楚地看到,当在列表中添加项目时,自动滚动不起作用.只有当用户手动操作时才会滚动.

推荐答案

您可以使用ScrollState来滚动Column的内容.

val scrollState = rememberScrollState()

Column(
   //...
){
    Column(
        Modifier
            .verticalScroll(scrollState)
    //....
}

然后,您可以使用您喜欢的逻辑来滚动内容. 例如,当屏幕加载时:

LaunchedEffect(Unit){
    scrollstate.animateScrollTo(scrollstate.maxValue)
}

如果您有一个列表,并且想要在可滚动的Column中加载新项目时滚动:

val favourites = remember { mutableStateListOf<String>() }
val scrollState = rememberScrollState()

LaunchedEffect(favourites.size) {
    scrollState.animateScrollTo(scrollState.maxValue)
}

enter image description here

Android相关问答推荐

Jetpack DataStore原生lib已添加到Bundle 包:libdatastore_share_counter.so-那是什么?

房间数据库迁移未正确处理:原因:java.lang. IllegalState异常:

错误:无法解析Symbol@style/Theme. Androidstudio in AndroidManifest.html for Kotlin Android Development''

当X为lambda函数时,如何避免Android Studio错误检测参数X未使用?

如何消除脚手架和顶杆(material 3)更改 colored颜色 时的延迟?

不能有意地从一个活动的可组合功能转移到另一个活动

在Android中使用Room从SQlite数据库中获取实体列表的正确方式是什么?

页面更改时不显示 cogo toast 消息

设置文本 colored颜色 动画时如何减少重新组合?

警告:应用必须面向 Android 13(API 级别 33)或更高版本.确实如此

有没有办法迭代类型安全的项目访问器?

如何禁用自动登录 google play games services android unity?

Android Studio 在 list 文件中已经声明了活动类,但仍出现无法找到明确的活动类的错误

如何在 Android Studio 中为带有 Room 的 SQLite 编写需要参数的查询?

如何在ExecutorService中设置progressBar的进度?不想使用 AsyncTask,因为它已被弃用

如何在 React Native 下载文件之前打开文件管理器并 Select 一个目录

更新后 Firebase 服务无法在模拟器上运行

如何在 Jetpack Compose 中擦除画布时变得透明,现在我得到白色?

基线配置文件 x R8/Proguard

在 compose 屏幕之间传递 uri 会导致:SecurityException: Permission Denial