2014-01-26 2 views
0

Я пытаюсь создать простую игру типа «whack a mole». Я застрял на первом препятствии:Выберите элемент размещения xml для Android

Я хочу (случайно) выбрать, а затем изменить цвет кнопки на моем макете.

У меня есть три кнопки на моем макете XML:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:weightSum="3" > 
    <Button 
     android:id="@+id/button1" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="1" /> 
    <Button 
     android:id="@+id/button2" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="2" /> 
    <Button 
     android:id="@+id/button3" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="3" /> 
</LinearLayout> 

И, на другой кнопке (Пуск) нажата, я делаю следующее в моем Java класс:

protected void pickRandomButton() { 
    // TODO Auto-generated method stub 
    randomButtonId = ""; 

    Random randomGenerator = new Random(); // construct a new random number generator 
    int randomNumber = randomGenerator.nextInt(3); 

    randomButtonId = "button" + (randomNumber +1); 
    Log.d(TAG, randomButtonId, null); 

    Button activeMole = (Button) findViewById(R.id.+"randomButtonId"); 
    activeMole.setBackgroundResource(color.red); 
} 

Это случайным образом генерирует значение от 0 до 2, затем я увеличиваю на 1 и объединяю его с строкой (randomButtonId), чтобы создать строку, которая является случайно выбранным идентификатором одной из трех кнопок.

Очевидно, что вторая-последняя строка неверна, но как я могу выбрать фактический элемент макета, так как теперь я хочу изменить его цвет (последняя строка)?

Любой совет очень получил!

ответ

2

Вы можете использовать getIdentifier:

protected void pickRandomButton() { 
    // TODO Auto-generated method stub 
    randomButtonId = ""; 

    Random randomGenerator = new Random(); // construct a new random number generator 
    int randomNumber = randomGenerator.nextInt(3); 

    randomButtonId = "button" + (randomNumber +1); 
    Log.d(TAG, randomButtonId, null); 

    int buttonId = getResources().getIdentifier(randomButtonId, "id", getPackageName()); 
    Button activeMole = (Button) findViewById(buttonId); 
    activeMole.setBackgroundResource(color.red); 
} 

Для цвета, определите свой собственный цвет в файле с именем colors.xml в папке values и загрузить его использовать setBackgroundResource или вы можете использовать activeMole.setBackgroundColor(Color.RED);.

+1

, который отлично работает, спасибо! – DazEvans

0

Сделать массив идентификаторов.

int [] ids = {R.id.button1, R.id.button2, R.id.button3};

Когда вы ссылаетесь на нее во второй-последней строке, просто используйте идентификаторы [randomnumber];

Кроме того, не добавляйте его. Держите случайный от 0 до 2.

+0

int [] ids = new int [3]; ids = {R.id.button1, R.id.button2, R.id.button3}; Дает ошибку: «Константы массива могут использоваться только в инициализаторах» – DazEvans

+0

Извините, раннее утро здесь, стало глупо в моих объявляющих массивах. Метод Zouzous, вероятно, более многоразовый, чем тот, который у меня есть. – AdamM

+0

не беспокойтесь, спасибо за ответ, хотя :) – DazEvans

Смежные вопросы