我对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;
}
}
};
为什么这不起作用? 任何人都知道解决这个问题的方法吗?
感谢您的帮助。
答案 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实例。