每次打开Android应用程序时更改背景颜色

时间:2017-10-02 18:51:28

标签: android

我对android编程世界很新,我遇到了一个问题:

我做了一个简单的应用程序,它基本上改变了背景的颜色和按钮的颜色,当你打开它时(我已经尝试过使用带有一些颜色设置在res中的开关),但它没有'工作,每次打开它都有相同的颜色。

这是我的活动代码:

public class MainActivity extends AppCompatActivity {

RelativeLayout v;
Button z;
Random r;
int randomNumber;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    v=(RelativeLayout) findViewById(R.id.mainLayout);
    z=(Button) findViewById(R.id.mainButton);

    r=new Random();
    randomNumber=r.nextInt(10);


    switch (randomNumber)
    {
        case 0: v.setBackgroundColor(R.color.indigo);  z.setBackgroundColor(R.color.indigoB); break;
        case 1: v.setBackgroundColor(R.color.deepOrange);  z.setBackgroundColor(R.color.deepOrangeB); break;
        case 2: v.setBackgroundColor(R.color.purple);  z.setBackgroundColor(R.color.purpleB); break;
        case 3: v.setBackgroundColor(R.color.blueGrey);  z.setBackgroundColor(R.color.blueGreyB); break;
        case 4: v.setBackgroundColor(R.color.red);  z.setBackgroundColor(R.color.redB); break;
        case 5: v.setBackgroundColor(R.color.green);  z.setBackgroundColor(R.color.greenB); break;
        case 6: v.setBackgroundColor(R.color.lime);  z.setBackgroundColor(R.color.limeB); break;
        case 7: v.setBackgroundColor(R.color.pink);  z.setBackgroundColor(R.color.pinkB); break;
        case 8: v.setBackgroundColor(R.color.yellow);  z.setBackgroundColor(R.color.yellowB); break;
        case 9: v.setBackgroundColor(R.color.teal);  z.setBackgroundColor(R.color.tealB); break;
        case 10:v.setBackgroundColor(R.color.deepPurple);  z.setBackgroundColor(R.color.deepPurpleB); break;
    }



}

};

为什么这不起作用? 任何人都知道解决这个问题的方法吗?

感谢您的帮助。

4 个答案:

答案 0 :(得分:0)

试试这个:

 private final int colorArray[] = {
        R.color.indigo, R.color.deepOrange, R.color.purple,R.color.blueGrey
     };

添加此方法以随机播放颜色:

static void shuffleArray(int[] arr)
    {
        Random rnd = new Random();
        for (int i = arr.length - 1; i > 0; i--)
        {
            int index = rnd.nextInt(i + 1);
            // Swap
            int a = arr[index];
            arr[index] = arr[i];
            arr[i] = a;
        }
    }

调用onCreate()中的shuffle方法并将颜色数组作为参数传递:

shuffleArray(imageArray)

然后使用:

v.setBackgroundColor(colorArray[0]);  
z.setBackgroundColor(colorArray[1]);

答案 1 :(得分:0)

尝试使用此功能

public int newRandom(){
   Random r;
   r=new Random();
   return  r.nextInt(10);
}

OnCreate put

randomNumber = newRandom();

答案 2 :(得分:0)

尝试将代码更改为onResume而非onCreate事件中的颜色,如:

@Override
protected void onResume() {
   super.onResume();
   // add code to change color here
}

因为应用程序实际上没有关闭并且只是最小化的可能性;当您点按图标以打开应用时,它只会最大化触发onResume事件而不是onCreate的应用;这就是颜色不变的原因是因为onCreate事件没有被触发。

答案 3 :(得分:0)

setBackgroundColor()接受颜色整数(@ColorInt),而不是颜色资源ID(@ColorRes)。您应该传递颜色而不是资源引用。

简而言之,替换:

v.setBackgroundColor(R.color.indigo);

使用:

v.setBackgroundColor(getColor(R.color.indigo));

如果您从上下文之外引用此视图,则需要从上下文中获取Resources实例。

相关问题