2016-10-15 6 views
0

Мне нужно создать прядильщик, который содержит некоторые цвета, и при выборе одного из них меняется цвет фона кнопки. Это то, что я пробовал:Как я могу изменить цвет фона кнопки от счетчика?

<resources> 
     <string name="app_name">MyFirst</string> 


      <string-array name="colors_array"> 
       <item>red</item> 
       <item>green</item> 
       <item>blue</item> 
       <item>pink</item> 
      </string-array> 
    </resources> 
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, 
       R.array.colors_array, android.R.layout.simple_spinner_item); 
     // Specify the layout to use when the list of choices appears 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     // Apply the adapter to the spinner 
     spinner.setAdapter(adapter); 
     spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { 
       bClick.setBackgroundColor(getResources().getColor(R.color.red)); 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parentView) { 
       bClick.setBackgroundColor(getResources().getColor(R.color.blue)); 
      } 

     }); 

Теперь это моя красную кнопку, но я не знаю, как изменить его к выбранному цвету, как я могу получить значение цвета по имени (в виде строки) й вот мой colors.xml

<resources> 

    <color name="colorPrimary">#3F51B5</color> 
    <color name="colorPrimaryDark">#303F9F</color> 
    <color name="colorAccent">#FF4081</color> 
    <color name="red">#FF0000</color> 
    <color name="green">#00FF00</color> 
    <color name="blue">#0000FF</color> 
    <color name="pink">#FF4081</color> 
</resources> 

ответ

1

вы можете попробовать использовать переключатель внутри метода «onItemSelected», как ниже:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { 
       switch (position) { 
        case 0: 
         bClick.setBackgroundColor(getResources().getColor(R.color.red)); 
         break; 
        case 1: 
         bClick.setBackgroundColor(getResources().getColor(R.color.green)); 
         break; 
        case 2: 
         bClick.setBackgroundColor(getResources().getColor(R.color.blue)); 
         break; 
        case 3: 
         bClick.setBackgroundColor(getResources().getColor(R.color.pink)); 
         break; 
        default: 
         bClick.setBackgroundColor(getResources().getColor(R.color.colorPrimary)); 
         break; 
       } 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parentView) { 
       bClick.setBackgroundColor(getResources().getColor(R.color.colorPrimaryDark)); 
      } 
     }); 
0

Получить значение выбранного элемента и на основе стоимости вы можете установить цвет button.Check это link

+0

нормально, но как я могу получить значение цвета по его имени? –

0

Я решил эту проблему, используя другой массив.

<string-array name="colors_array"> 
     <item>red</item> 
     <item>green</item> 
     <item>blue</item> 
     <item>pink</item> 
    </string-array> 
<string-array name="colors1_array"> 
    <item>@color/red</item> 
    <item>@color/green</item> 
    <item>@color/blue</item> 
    <item>@color/pink</item> 
</string-array> 

И использовать его как это:

Resources res = getResources(); 
     final int[] rainbow = this.getResources().getIntArray(R.array.colors1_array); 
     spinner.setAdapter(adapter); 
     spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { 
       int i = spinner.getSelectedItemPosition(); 
       bClick.setBackgroundColor(rainbow[i]); 

      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parentView) { 
       bClick.setBackgroundColor(getResources().getColor(R.color.blue)); 
      } 

     });