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
相关产品推荐
相关产品推荐

