調用 setColorSchemeColors(android.R.color.holo_blue_light, ...) 後,下拉刷新進度條仍為白色圓圈,無彩色效果。
setColorSchemeColors 接收的是顏色值(如 0xFF33B5E5),而 android.R.color.xxx 是資源 ID(整數),直接傳入會被誤認為顏色值,導致顯示異常。
swipeRefreshLayout.setColorSchemeResources(
R.color.color3,
R.color.color1,
R.color.color2,
R.color.color4
);
在 colors.xml 中定義顏色資源:
<resources>
<color name="color1">#FF33B5E5</color> <!-- holo_blue_light -->
<color name="color2">#FFFF4444</color> <!-- holo_red_light -->
<color name="color3">#FFFFBB33</color> <!-- holo_orange_light -->
<color name="color4">#FF99CC00</color> <!-- holo_green_light -->
</resources>
int[] colors = new int[]{
ContextCompat.getColor(this, android.R.color.holo_blue_light),
ContextCompat.getColor(this, android.R.color.holo_red_light),
ContextCompat.getColor(this, android.R.color.holo_orange_light),
ContextCompat.getColor(this, android.R.color.holo_green_light)
};
swipeRefreshLayout.setColorSchemeColors(colors);
SwipeRefreshLayout 樣式。當前版本均為圓圈樣式,無法通過 API 切換回長條樣式。
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeRefresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
// Activity/Fragment 中
SwipeRefreshLayout swipeRefresh = findViewById(R.id.swipeRefresh);
swipeRefresh.setColorSchemeResources(R.color.swipe_color_1, R.color.swipe_color_2,
R.color.swipe_color_3, R.color.swipe_color_4);
swipeRefresh.setOnRefreshListener(() -> {
// 執行刷新邏輯
loadData();
swipeRefresh.setRefreshing(false);
});
setColorSchemeColors(顏色值)與 setColorSchemeResources(資源 ID)。androidx.swiperefreshlayout.widget.SwipeRefreshLayout(AndroidX 版本)。onViewCreated 中初始化,而非 onCreateView 返回前。colors.xml 定義,勿硬編碼顏色值。使用 setColorSchemeResources 替代 setColorSchemeColors,並配合自定義顏色資源,即可正確顯示 Material 風格的彩色圓圈進度條。