2014-08-31 109 views
0

我有一個問題,改變背景顏色隨機:
首先,我嘗試使用parseColor在Colorclass:解析色VS解析INT

public class Colors { 

     public String[] colors = { 
      "#39add1", // light blue 
      "#3079ab", // dark blue 
      "#c25975" // mauve 
     }; 

     public int getcolor() { 
      Random randomGenerator = new Random(); 
      String color = ""; 

      int randomNumber = randomGenerator.nextInt(3); 

      color = colors[randomNumber]; 
      int colorAsInt = Color.parseColor(color); 
      return colorAsInt; 
     } 
} 

而且在活動類:

View.OnClickListener listener = new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
       int color = mColors.getcolor(); 
       relativeLayout.setBackgroundColor(color); 
     } 
}; 

它完美的作品:
但是,當我嘗試使用返回類型的getcolor字符串和在活動類中使用parse int時,當我運行該應用程序它給了我一個錯誤:不幸的是應用程序已停止。

顏色類:

public String getcolor() { 
    Random randomGenerator = new Random(); 
    String color = ""; 

    int randomNumber = randomGenerator.nextInt(3); 

    color = colors[randomNumber]; 
    return color; 
} 

以及活動類:

View.OnClickListener listener = new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
       String color = mColors.getcolor(); 
       relativeLayout.setBackgroundColor(Integer.parseInt(color)); 
     } 
}; 

爲什麼這個問題會發生什麼?

+0

你需要看的logcat,以確定飛機失事的原因。 – 2014-08-31 08:39:46

+0

[可惜MyApp已停止。我怎樣才能解決這個問題?](http://stackoverflow.com/questions/23353173/uncomfort-myapp-has-stopped-how-can-i-solve-this) – 2014-08-31 08:40:02

回答

2

Integer.parseInt(color)不能解析字符串,因爲它不是一個整數字符串"#39add1"
您必須像使用第一個功能一樣使用Color.parseColor(color)

relativeLayout.setBackgroundColor(Color.parseColor(color)); 
+0

什麼是整數字符串? – habib 2014-08-31 09:35:53

+0

包含數字的字符串只有「123」和「12.34」 – JafarKhQ 2014-08-31 09:57:31

0

你的顏色定義更改爲

public int[] colors = { 
    0x39add1, // light blue 
    0x3079ab, // dark blue 
    0xc25975 // mauve 
}; 

,並使用

setBackgroundColor(colors[0]); 
+0

int color和string color之間有什麼特別的區別嗎? – habib 2014-08-31 09:34:32

+0

是的,這是工作。 – habib 2014-08-31 13:13:49