【问题标题】:How to pass int array of color resource ids from array.xml to SwipeRefreshLayout.setColorSchemeResources如何将颜色资源 ID 的 int 数组从 array.xml 传递到 SwipeRefreshLayout.setColorSchemeResources
【发布时间】:2015-01-23 20:17:11
【问题描述】:

我已经让 Android 的 SwipeRefreshLayout 正常工作,并且正在尝试自定义整个应用程序中所有拉动刷新的颜色。为了遵循 DRY 原则,我尝试将所需的颜色移动到 array.xml,如下所示:

<resources>
    <array name="swipeRefreshColors">
        <item>@color/pink</item>
        <item>@color/green</item>
    </array>
</resources>

但是,当我尝试将它们导入到滑动中以刷新时:

swipeRefreshLayout.setColorSchemeResources(R.array.swipeRefreshColors);

我得到一个 Resources$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 代码子类化并在那里对颜色进行硬编码,但这绝对是一个 hack。必须有一种方法可以从 Activity 中引用一组颜色来自定义它。

任何帮助将不胜感激!

【问题讨论】:

    标签: android pull-to-refresh swiperefreshlayout


    【解决方案1】:

    原来我遗漏了两个关键部分。

    错误代码:

    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 中的引用被转换为显式颜色值。

    希望这可以帮助其他人!

    【讨论】:

    • 感谢这对我有很大帮助,我在 kotlin 中尝试了这个,并得到错误说需要一个 Int 而不是 IntArray。对我来说解决这个问题的是在数组变量之前添加一个星号,就像*swipeRefreshColors,如果你在其他地方初始化变量。否则我猜它只是一个setColorSchemeColors(*... :)
    猜你喜欢
    • 2017-04-07
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    相关资源
    最近更新 更多