2016-09-27 19 views
-1

過去,我有someMethod();這需要在一種顏色作爲參數,並使用該顏色爲view.setColor();如何檢查,如果顏色是從Color.class或color.xml

參數正常工作時,我通過這樣的顏色:R.color.softgreen但如果我通過Android的Color class像這樣的顏色:Color.RED;然後我得到android.content.res.Resources$NotFoundException Resource ID #0xffffffff,因爲Color.RED不起作用ContextCompat.getcolor();我用於獲取顏色資源。

那麼如何檢查someMethod(int mainColor);中的顏色是從color.xml還是從Android顏色類如Color.WHITE

還是有更好的解決方案嗎?

public void someMethod(final View view, final int mainColor, final Integer returnColor) { 

     //if mainColor is from color.xml or color resource use this: 
     view.setColor(ContextCompat.getColor(context, mainColor)); 
     //else just do this: 
     view.setColor(mainColor); 

    } 
+0

其實你的要求是什麼? –

+0

@MurtazaKhursheedHussain我想知道如何檢查顏色來自哪裏。如果來自color.xml,那麼該方法將使用'ContextCompat.getColor();'來獲取顏色,如果不是,那麼它不應該使用'ContextCompat。getcolor()' – Muddz

+0

通過總是顏色,留給呼叫者責任將資源ID轉換爲顏色 – Blackbelt

回答

1

因此,如何我可以檢查是否顏色的someMethod通過(INT mainColor); 來自color.xml或來自Android的Color類,例如:Color.WHITE?

有沒有辦法。你的方法不應該對提供的int的可能含義做任何假設。它應該以同樣的方式線程化,就像一種顏色。在這種情況下,客戶端,方法的調用者有責任提供正確的參數。因此,將顏色資源轉換爲真實顏色將是它的責任。

+0

Allrighty。然後我會用這個方法謝謝。和什麼與投票打倒人?我們來這裏尋求幫助,並要求「愚蠢」的問題來學習,反應是否定的? – Muddz

+0

*獲得幫助,並要求「愚蠢」的問題學習和答案是否定的?*不總是。享受它 – Blackbelt

0

使用兩種方法

方法1:

public void someMethod(Context mContext,final View view, final int mainColor, final Integer returnColor) { 


    view.setColor(ContextCompat.getColor(mContext, mainColor)); 

} 

方法2:

public void someMethod(final View view, final int mainColor, final Integer returnColor) { 


    view.setColor(mainColor); 

} 
+0

這隻會給一個resourceNotFound異常 – Muddz

1

正如之前的評論所說 - 一個int是一個int!所有你能做的就是保護自己一點上你的方法使用ColorRes annoation這樣的:

public void someMethod(final View view, @ColorRes final int mainColor, final Integer returnColor) { 

    view.setColor(ContextCompat.getColor(context, mainColor)); 

} 

在實際的色彩傳遞給mainColor將生產Android Studio中的警告。

這個的倒數是@ColorInt,這意味着參數應該是分辨的顏色。這可能也意味着,如果你讓它不註釋。

1

R.color.xxx不是顏色,它只是該顏色的一個id。

Resources.NotFoundException可以被try/catch抓住。

所以,試試這個:

public void someMethod(final View view, final int mainColor, final Integer returnColor) { 
    try { 
     view.setBackgroundColor(ContextCompat.getColor(this, mainColor)); 
    } catch (Resources.NotFoundException e) { 
     e.printStackTrace(); 
     view.setBackgroundColor(mainColor); 
    } 
} 
+0

我會測試 – Muddz

相關問題