我已经安装了Android的SwipeRefreshLayout工作,我正在尝试自定义所有拉动中的颜色以刷新整个应用程序。为了遵循DRY原则,我尝试将所需的颜色移动到array.xml,如下所示:
<resources>
<array name="swipeRefreshColors">
<item>@color/pink</item>
<item>@color/green</item>
</array>
</resources>
但是,当我尝试将它们导入滑动以刷新时:
swipeRefreshLayout.setColorSchemeResources(R.array.swipeRefreshColors);
我得到一个资源$ NotFoundException:
android.content.res.Resources$NotFoundException: Resource ID #0x7f060001
at android.content.res.Resources.getValue(Resources.java:1233)
at android.content.res.Resources.getColor(Resources.java:887)
at android.support.v4.widget.SwipeRefreshLayout.setColorSchemeResources(SwipeRefreshLayout.java:477)
我尝试了一些事情,比如子类化SwipeRefreshLayout代码并对那里的颜色进行硬编码,但它确实是一个黑客攻击。必须有一种方法可以从Activity中引用一系列颜色来自定义它。
非常感谢任何帮助!
答案 0 :(得分:16)
原来我错过了两个关键部分。
错误的代码:
swipeRefreshLayout.setColorSchemeResources(R.array.swipeRefreshColors);
正确代码:
swipeRefreshLayout.setColorSchemeColors(getResources().getIntArray(R.array.swipeRefreshColors));
我遗失了两件事。
1)我需要表明我从我的array.xml文件中获得了IntArray
。这是通过getResources().getIntArray(R.array.swipeRefreshColors)
完成的。
答案已删除,但感谢之前提出此建议的人。
2)错误的关键部分是我必须使用setColorSchemeColors
而不是setColorSchemeResources
。我想在构建过程中的某些时候,我在Array中的引用被转换为显式颜色值。
希望这可以帮助别人!