2015-06-22 54 views
0

奇怪的事情發生。我正在嘗試爲微調設置背景。 spinner.setBackgroundResource(R.drawable.spinner_error);此代碼在低於5的Android版本中工作良好,但在棒棒糖中,此代碼無所作爲。我試圖改變顏色spinner.setBackgroundColor(Color.RED);,但它只能讓微調不可見。那麼,如何改變微調器顏色/資源?setBackgroundResource()在Android 5中微調不起作用

編輯: 適配器代碼:

public class FuelStoragesAdapter extends ArrayAdapter<ModelFuelStorage> { 

    private Context context; 
    private List<ModelFuelStorage> fuelStorages; 
    private boolean addAdditionalItems = false; 

    public FuelStoragesAdapter(Context context, List<ModelFuelStorage> fuelStorages, boolean addAdditionalItems) { 
     super(context, android.R.layout.simple_spinner_item, fuelStorages); 
     this.context = context; 
     this.fuelStorages = fuelStorages; 
     this.addAdditionalItems = addAdditionalItems; 
     setDropDownViewResource(R.layout.spinner_dropdown_layout); 
     if (addAdditionalItems) 
      addAdditionalItems(); 
    } 

    public void addStorage(ModelFuelStorage fuelStorage) { 
     insert(fuelStorage, getCount() - 1); 
     notifyDataSetChanged(); 
    } 

    public void addAdditionalItems() { 
     fuelStorages.add(new ModelFuelStorage(0, context.getString(R.string.add_new_storage), 0)); 
     fuelStorages.add(new ModelFuelStorage(-1, context.getString(R.string.choose_storage), 0)); 
    } 


    @Override 
    public int getCount() { 

     if (addAdditionalItems) 
      return super.getCount() - 1; // you dont display last item. It is used as hint. 
     else 
      return super.getCount(); 
    } 

    public int getPosition(int storageId){ 
     for(ModelFuelStorage storage : fuelStorages) 
      if(storage.getId() == storageId) 
       return fuelStorages.indexOf(storage); 
     return 0; 
    } 

} 
+0

要設置「R .layout.spinner_dropdown_layout「佈局到您的微調器。請分享此代碼。 –

回答

0

對此的解決方案是增加動態創建微調時這個代碼:

spinner.setPopupBackgroundResource(R.drawable.spinner); 

和繪製對象的文件夾下創建spinner.xml:

<?xml version="1.0" encoding="utf-8"?> 
<shape 
xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
<solid android:color="#ffffff" /> 
</shape> 

該解決方案要求API等級爲16及以上。

+0

對不起,但我需要的解決方案也可以在API 9上運行。 – Eddwhis

+0

它在16的更高級別上工作嗎? –

+0

它更改微調控制器彈出背景,但不改變微調背景。 – Eddwhis

2

頂端提供嘗試這種代碼:的

spinner.setBackgroundColor(Color.parseColor("#FFFF00")); 

「#FFFF00」,而不是該使用其他顏色的代碼。此是Android V5爲我工作。

+0

我得到與'spinner.setBackgroundColor(Color.RED)相同的結果;' - spinner變得不可見。 – Eddwhis

+0

請顯示代碼。 –

+0

@Eddwhis我試過這個代碼在Android 5.0.1上,它的工作。只需將#FFFF00更改爲#FFFF0000以獲得紅色 – Strider

0

在Android Lollipop版本中,您必須分別實現kitkat版本和棒棒糖版本的代碼,請執行此代碼以更改微調框的背景。它的圖像背景變化的例子。

 if (Build.VERSION.SDK_INT => Build.VERSION_CODES.KitKat) 
         { 
          //for Lollipop Vession 

//set color in this block which you want 
spinner.setBackgroundDrawable(Color.RED); 
         } 
         else 
         { 
    // for Kikat Version 

spinner.setBackgroundResource(xyz); 
//set color in this block which you want 
         } 

我希望它可以幫助你,如果是,那麼請標誌着我有用的代碼..感謝名單.. :)

+0

微調不具有'getDrawable'方法。 – Eddwhis

+0

@Eddwhis: - 我是編輯好的代碼,請檢查一下,對你有幫助嗎? –

0

你有沒有設置任何適配器將微調?如果不使用這樣的事情: 將在您的活動的onCreate()方法:

//Get your spinner 
spinner = (Spinner)findViewById(R.id.spinner); 

// Defined Array values to show in ListView 
String[] values = new String[] { "item1", 
      "item2", 
      "item3"}; 

//Construct the ArrayAdapter 
ArrayAdapter<String> spinneradapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_dropdown_item, android.R.id.text1, values); 

//Set the adapter to the corresponding spinner 
spinner.setAdapter(spinneradapter); 

//Change background color to "RED" 
spinner.setBackgroundColor(Color.parseColor("#FFFF0000")); 

測試,適用於Android 5.0.1

希望這將幫助你

+0

添加ArrayAdapter代碼來提問。 – Eddwhis