SwipeRefreshLayout应用主题

问题描述 投票:6回答:2

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

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

public void setColorSchemeResources (int... colorResIds)

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

android swiperefreshlayout
2个回答
6
投票

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

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

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

编辑1:截至24.2.1,上述情况仍然如此


0
投票

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

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

}

© www.soinside.com 2019 - 2024. All rights reserved.