2012-04-29 83 views
1

我正在製作一個應用程序來計算其顏色帶外的電阻值。在純編程方面一切正常。在選擇色帶的那一刻,我正在使用一個裝滿顏色列表的微調框。自定義微調器的項目背景顏色

我真的想讓它看起來更好。我希望能夠在微調各個項目的背景色設置爲與其對應的顏色:

enter image description here

我應該怎麼做才能實現這一目標?這裏是我的代碼部分:

Array用於微調:

<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顏色值(ARGB)。例如,紅色將是0xffff0000。

+0

謝謝,但我想說的是,爲了方便使用,微調器中的項目應該具有與項目名稱相對應的背景顏色。 –

+0

這正是代碼的作用。微調器的子視圖是在getView()中創建的。並通過調用setBackgroundColor實現你想要的。唯一的(小問題)是setBackgroundColors接受一個int。 (4字節。1> Alpha 2> Red 3> Green 4> Blue)。所以你需要編寫一個映射函數來將名稱轉換爲這些整數。 – Renard

+0

O好吧,對不起,我對Java很糟糕...不知道這可能會做什麼:P我會嘗試將此端口移植到C#。 –

相關問題