【问题标题】:How can I show the indicator in a VerticalScroller (android developer compose)?如何在 VerticalScroller(android 开发人员撰写)中显示指标?
【发布时间】:2020-03-08 02:05:43
【问题描述】:

致力于了解 Android Studio 4.0 Canary 中的 android jetpackcompose

我有一个简单的jetpackcompose 设置和VerticalScroller,如下所示:

@Composable
fun MyScreenContent(appState: AppState = AppState())
{

    FlexColumn{


       flexible(flex = 1f){
           VerticalScroller {
             Column {
                CardDemo()
                CardDemo()
                CardDemo()
                CardDemo()
                CardDemo()
                CardDemo()
                CardDemo()
                CardDemo()
                CardDemo()
                CardDemo()
                CardDemo()
                CardDemo()
                CardDemo()
                CardDemo()
                CardDemo()
                CardDemo()
                CardDemo()
                CardDemo()
                CardDemo()
            }
        }
    }
 }
}

它滚动完美,但我想要一个 scrollindicator,它显示我的列表滚动了多远,我如何打开它,找不到任何要包含的 ScrollIndicator(即)组件。

参考。在 scrollindicator 可见的不可组合设置 (xml) 中到 RecyclerView

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/station_list"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/recyclerview_background_color"
                android:clipChildren="true"
                android:clipToPadding="false"
                android:fadeScrollbars="false"
                android:paddingLeft="0dp"
                android:paddingRight="0dp"
                android:scrollbarSize="4dp"
                android:scrollbarThumbVertical="@color/colorPrimary"   <---
                android:scrollbars="vertical"                          <---
                android:visibility="visible"
                app:isGone="@{!hasStations}"
                app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
                app:layout_constraintStart_toStartOf="parent"
                tools:context="no.rogo.projectfk303.ui.activities.MainActivity"
                tools:listitem="@layout/list_item_station" />

【问题讨论】:

    标签: android scrollbar android-jetpack-compose


    【解决方案1】:

    对于jetpack compose 桌面,它将是:

    @Composable
    fun ScrollBox(
        modifier: Modifier = Modifier,
        columnVerticalArrangement: Arrangement.Vertical = Arrangement.Top,
        columnHorizontalAlignment: Alignment.Horizontal = Alignment.Start,
        rowHorizontalArrangement: Arrangement.Horizontal = Arrangement.Start,
        rowVerticalAlignment: Alignment.Vertical = Alignment.Top,
        content: @Composable ColumnScope.() -> Unit
    ) {
        val horizontalScrollState = rememberScrollState(0)
        val verticalScrollState = rememberScrollState(0)
    
        Box(modifier) {
            Row(Modifier.horizontalScroll(horizontalScrollState), horizontalArrangement = rowHorizontalArrangement, verticalAlignment = rowVerticalAlignment) {
                Column(Modifier.verticalScroll(verticalScrollState), columnVerticalArrangement, columnHorizontalAlignment) {
                    content()
                }
            }
            HorizontalScrollbar(
                adapter = rememberScrollbarAdapter(horizontalScrollState),
                modifier = Modifier.align(Alignment.BottomEnd),
                style = LocalScrollbarStyle.current.copy(unhoverColor = LocalScrollbarStyle.current.hoverColor.copy(alpha = 0.35f))
            )
            VerticalScrollbar(
                adapter = rememberScrollbarAdapter(verticalScrollState),
                modifier = Modifier.align(Alignment.CenterEnd),
                style = LocalScrollbarStyle.current.copy(unhoverColor = LocalScrollbarStyle.current.hoverColor.copy(alpha = 0.35f))
            )
        }
    }
    

    及用法:

        BoxWithConstraints {
            val parentHeight: Dp = with(LocalDensity.current)  { constraints.maxHeight.toDp() }
    
            Box(
                Modifier.background(Color.Gray)
                    .sizeIn(
                        minHeight = 50.dp,
                        maxHeight = parentHeight * 0.5f
                    )
            ) {
                ScrollBox {
                    <your large Composables here>
                }
            }
        }
    

    【讨论】:

    • 我认为 beta3 中不再存在这种情况。你知道当前的等价物吗?
    • 它仍在编译并与我一起工作......你的“问题”是什么? @A.Steenbergen
    • (只记得ScrollState 现在采用 Int 而不是 Float)
    • 所以我的示例是针对 jetpack compose 桌面(不是纯 android),VerticalScrollbar 在 import androidx.compose.foundation.* 中,因为包表明我认为它必须与其他 compose 变体一起存在跨度>
    • 是的,似乎只有桌面。我的问题是针对 Jetpack Compose for Android 的。似乎有不同的方法可以做到这一点..虽然我找不到。
    猜你喜欢
    • 2014-07-03
    • 2011-06-25
    • 2021-01-06
    • 2017-07-30
    • 2019-03-17
    • 2015-11-09
    • 1970-01-01
    • 2018-04-02
    相关资源
    最近更新 更多