2015-01-23 11 views
10

Tôi đã làm việc của Android SwipeRefreshLayout và đang cố gắng tùy chỉnh màu sắc trên tất cả các kéo để làm mới trong suốt ứng dụng. Để thực hiện theo nguyên tắc DRY, tôi đã cố gắng di chuyển các màu sắc mong muốn để array.xml như sau:Làm thế nào để vượt qua mảng int của id tài nguyên màu sắc từ array.xml để SwipeRefreshLayout.setColorSchemeResources

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

Tuy nhiên, khi tôi cố gắng và nhập chúng vào các swipe để làm mới:

swipeRefreshLayout.setColorSchemeResources(R.array.swipeRefreshColors); 

tôi nhận được một Tài $ 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) 

tôi đã thử một vài điều như subclassing mã SwipeRefreshLayout và cứng mã hóa màu sắc đó, nhưng nó chắc chắn là một hack. Có một cách để tham chiếu một mảng màu từ Hoạt động để tùy chỉnh nó.

Bất kỳ trợ giúp nào sẽ được đánh giá rất nhiều!

Trả lời

14

Hóa ra tôi đã thiếu hai phần chính.

Wrong Mã:

swipeRefreshLayout.setColorSchemeResources(R.array.swipeRefreshColors); 

Đúng Mã số:

swipeRefreshLayout.setColorSchemeColors(getResources().getIntArray(R.array.swipeRefreshColors)); 

Có hai điều tôi đã mất tích.

1) Tôi cần phải cho biết rằng tôi đã nhận được IntArray từ tệp array.xml của mình. Điều này được thực hiện thông qua getResources().getIntArray(R.array.swipeRefreshColors).

Câu trả lời đã bị xóa nhưng nhờ ai đã đề xuất điều này trước đây.

2) Phần quan trọng sai là tôi phải sử dụng setColorSchemeColors thay vì setColorSchemeResources. Tôi đoán tại một số điểm trong quá trình xây dựng các tài liệu tham khảo tôi đã có trong Array đã được chuyển đổi thành giá trị màu sắc rõ ràng.

Hy vọng điều này có thể giúp người khác!

+0

Cảm ơn điều này đã giúp rất nhiều, tôi đã thử điều này trong kotlin và có lỗi nói rằng một Int là cần thiết thay vì IntArray. Những gì cố định này cho tôi đã được thêm một ngôi sao trước khi biến mảng như vậy, '* swipeRefreshColors', nếu bạn khởi tạo biến ở nơi khác. Nếu không, tôi đoán nó sẽ chỉ là một 'setColorSchemeColors (* ...' :) – nmu

Các vấn đề liên quan