首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android SwipeRefreshLayout 進度條顏色不顯示問題解決

     編輯:程式設計疑難解答

問題現象

調用 setColorSchemeColors(android.R.color.holo_blue_light, ...) 後,下拉刷新進度條仍為白色圓圈,無彩色效果。

根本原因

setColorSchemeColors 接收的是顏色值(如 0xFF33B5E5),而 android.R.color.xxx 是資源 ID(整數),直接傳入會被誤認為顏色值,導致顯示異常。

正確解決方案

方法一:使用 setColorSchemeResources(推薦)

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>

方法二:解析資源 ID 獲取顏色值

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);

進度條樣式演變說明

  • 長條狀:舊版 Support Library(v4/v7 早期版本)的 SwipeRefreshLayout 樣式。
  • 圓圈狀:Material Design 規範引入後(v22.1+)的新樣式,符合 MD 設計語言。

當前版本均為圓圈樣式,無法通過 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 版本)。
  • 若在 Fragment 中使用,確保在 onViewCreated 中初始化,而非 onCreateView 返回前。
  • 自定義顏色需在 colors.xml 定義,勿硬編碼顏色值。

總結

使用 setColorSchemeResources 替代 setColorSchemeColors,並配合自定義顏色資源,即可正確顯示 Material 風格的彩色圓圈進度條。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved