解析颜色VS解析int

时间:2014-08-31 08:37:50

标签: java android parseint

我在随机更改背景颜色时遇到问题:
首先,我尝试在Colorclass中使用parseColor:

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;
      }
} 

在Activity类中:

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

完美无缺:
但是当我尝试将String用于返回类型的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));
        }
 };

为什么会出现这个问题?

2 个答案:

答案 0 :(得分:3)

Integer.parseInt(color)无法解析字符串,因为它不是整数字符串"#39add1" 您必须像第一个函数一样使用Color.parseColor(color)

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

答案 1 :(得分:0)

将颜色定义更改为

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

并使用

setBackgroundColor(colors[0]);