You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwipeRefreshLayout首次下拉进度条显黑色,松手后才变色如何解决

问题根因

setColorSchemeResources、setProgressBackgroundColorSchemeResource两个样式配置方法被写在了setOnRefreshListener的回调内部。该回调仅在用户下拉到阈值松手、正式触发刷新逻辑时才会执行,首次下拉拖拽的过程中回调还未触发,组件会加载默认的黑色进度指示器样式,自然不会显示预先配置的主题色。

修复方法

将进度指示器的样式配置逻辑从刷新监听回调中移出,在View初始化阶段就完成属性设置,不要等刷新触发时再配置。

正确Kotlin实现代码

swipeExploreBuyerRefresh.apply {
    // 初始化阶段先配置样式
    setProgressBackgroundColorSchemeResource(R.color.white)
    setColorSchemeResources(
        R.color.primary,
        R.color.orange,
        R.color.red
    )
    // 样式配置完成后再绑定刷新监听
    setOnRefreshListener {
        shimmerExploreBuyerItemOutlet.apply {
            startShimmer()
            visibility = View.VISIBLE
        }
        showOutletList()
    }
}

可选XML配置方式

也可以直接在布局文件中给SwipeRefreshLayout配置对应属性,无需额外写Kotlin代码设置样式,避免遗漏:

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
    android:id="@+id/swipe_explore_buyer_refresh"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    app:progressBackgroundColor="@color/white"
    app:colorSchemeColors="@color/primary,@color/orange,@color/red"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <!-- 内部嵌套布局 -->

</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

调整完成后首次下拉拖拽时,进度指示器就会直接显示配置的主色调绿色,不会再出现默认黑色的问题。


内容的提问来源于stack exchange,提问作者Villa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:42:15