SwipeRefreshLayout 应用主题

SwipeRefreshLayout App Theme

有没有办法使用主题修改 SwipeRefreshLayout 中箭头的颜色?

我知道您可以通过编程方式使用此代码

public void setColorSchemeResources (int... colorResIds)

但我希望默认情况下将箭头设置为我的应用程序的主题,而不必每次在某处使用 SwipeRefrestLayout 时都在代码中更改它。

从支持 v4 23.0.1 开始,在 SwipeRefreshLayout 构造函数中从 xml 中提取的唯一属性是 android.R.attr.enabled

意思是不,设置颜色的唯一方法是在代码中。

但是,您可以创建一个颜色 ID 的数组资源来保存您的颜色组合并引用它,而不是在整个代码库中使用重复的列表。并没有好多少,但至少有一个改变,然后只需要触摸一个文件。

编辑 1: 截至 24.2.1

以上内容仍然适用

在这种情况下,对我来说最好的解决方案是扩展 SwipeRefreshLayout 并在那里设置颜色,然后在 xml 中使用此 class 或在需要时编写代码。

public class ColoredSwipeRefreshLayout extends SwipeRefreshLayout {

public ColoredSwipeRefreshLayout(@NonNull Context context) {
    super(context);
    setColors();
}

public ColoredSwipeRefreshLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);
    setColors();
}

private void setColors() {
    setColorSchemeColors(
            ContextCompat.getColor(getContext(), R.color.blue_main),
            ContextCompat.getColor(getContext(), R.color.blue_accent),
            ContextCompat.getColor(getContext(), R.color.blue_dark));
}

}