2012-04-29 3 views
1

Я делаю приложение, чтобы вычислить значение резистора из его цветовых диапазонов. Все работает отлично на чистой стороне программирования. На данный момент для выделения цветных полос я использую счетчик, заполненный списком цветов.Настройка цвета фона элемента счетчика

Я действительно хочу, чтобы все выглядело лучше. Я хочу, чтобы иметь возможность установить цвет фона для каждого элемента блесны в соответствующий цвет:

enter image description here

Что я должен сделать для того чтобы достигнуть этого? Вот часть моего кода:

Массив используется для блесны:

<string-array name="FourBandResistorFullColor"> 
    <item>Black</item> 
    <item>Brown</item> 
    <item>Red</item> 
    <item>Orange</item> 
    <item>Yellow</item> 
    <item>Green</item> 
    <item>Blue</item> 
    <item>Violet</item> 
    <item>Gray</item> 
    <item>White</item>  
    </string-array> 

код адаптера в OnCreate метода:

var bandOne = FindViewById<Spinner>(Resource.Id.bandOneColor); 
    var bandOneAdapter = ArrayAdapter.CreateFromResource(this, Resource.Array.FourBandResistorFullColor, 
                 Android.Resource.Layout.SimpleSpinnerItem); 
    bandOneAdapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem); 
    bandOne.Adapter = bandOneAdapter; 
    bandOne.ItemSelected += BandOne_ItemSelected; 
+0

Какой адаптер вы используете для 'Spinner'? – Luksprog

+0

Я обновил вопрос с помощью некоторого кода! –

ответ

2

Вы должны использовать собственный адаптер. Думаю, вы используете ArrayAdapter? Если так что вы могли бы сделать это следующим образом:

private class MyArrayAdapter extends ArrayAdapter<String>{ 

     public MyArrayAdapter(Context context, int textViewResourceId) { 
      super(context, textViewResourceId); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View view = super.getView(position, convertView, parent); 
      int color = getColorFromName(getItem(position)); 
      view.setBackgroundColor(color); 
      return view; 
     } 
    } 

Обратите внимание, что getColorFromName функция вам нужно будет реализовать себя. Он отображает от String значение int color (ARGB). Красный для exmaple будет 0xffff0000.

+0

Спасибо, но я считаю, что элементы в прядильщике должны иметь цвета фона, соответствующие имени элемента, для удобства использования. –

+0

это именно то, что делает код. В getView() создаются дочерние представления spinner. И, позвонив setBackgroundColor, вы достигнете того, чего хотите. Единственная (второстепенная) проблема заключается в том, что setBackgroundColors принимает int. (4 байт. 1> Альфа 2> Красный 3> Зеленый 4> Синий). Поэтому вам нужно написать функцию сопоставления для преобразования имен в эти int. – Renard

+0

O О, извините, я ужасен на Java ... не знаю, что это могло бы сделать: P Я попытаюсь передать это на C#. –

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