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));
}
}
有没有办法使用主题修改 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));
}
}