2010-06-17 59 views
2

我想通過函數getColor()設置TextView的顏色。我嘗試了很多不同的方式,但我無法正常工作。我的代碼不能編譯。Java - 通過開關盒功能設置顏色

import java.awt.*; 
import android.graphics.Color; 

public class test extends Activity { 

TextView text1 = (TextView) findViewById(R.id.text1); 

text1.setTextColor(getcolorss(1)); 

public Color getColor(int x) { 
    switch(x) { 
     case 1: return Color.BLUE; 
     case 2: return Color.RED; 
    } 
} 

} 

你會怎麼做呢?

+0

請包括什麼不工作,給出的代碼看起來像它不編譯。爲什麼這不是編譯與我的文本完全不同,當我運行這個時,顏色不會改變。 – 2010-06-17 09:33:25

回答

3

有很多方法可以做到這一點。看看android.graphics.Color,RED,BLUE等只是int常數。因此,我們可以有這樣的事情:

int[] pallete = { Color.BLUE, Color.RED }; 

然後簡單:

return pallete[x]; 

這自然throw ArrayIndexOutOfBoundsExceptionx是出界。你可以檢查它,並做一些其他的事情,如果這是你想要的。請注意,在Java數組是基於0,這意味着給出了上述聲明:

pallete[0] == Color.BLUE 
pallete[1] == Color.RED 

原代碼使用基於1的索引,所以如果你需要,你可以做簡單的翻譯:

return pallete[x-1]; 
+0

謝謝你這就是我想要的。但現在他標記爲「Color.BLUE」和「Color.RED」並給我錯誤信息「類型不匹配:無法從int轉換爲Color」。爲什麼?我需要更多進口嗎? – 2010-06-17 09:49:08

+0

@Simon:我剛剛查看了文檔,'Color.BLUE'是一個'int',所以我們需要一個'int []'。我已經修復了這個答案。 – polygenelubricants 2010-06-17 10:08:01

+0

Iam一個白癡。謝謝你的作品! – 2010-06-17 10:16:28

2

你不能這樣做,因爲如果你打電話給getcolorss(3)就沒有返回聲明。 嘗試之一:

public Color getcolorss(int x) 
{ 
switch(x) 
{ 
    case 1: return Color.BLUE; 
    case 2: return Color.RED; 
    default: return null; 
} 
} 

public Color getcolorss(int x) 
{ 
Color result = null; 
switch(x) 
{ 
    case 1: result = Color.BLUE; 
    case 2: result = Color.RED; 
} 
// this allows you to do something else here, if you require something more complex 
return result; 
}