2013-02-16 128 views
0

我把一個微調器放在AlertDialog中,並且由於某些原因,顏色的顯示方式與正常活動不同。這使我想到這個問題:如何更改微調器文本和背景顏色?

android spinner

當我有微調的正常活動,文本顏色爲下拉列表中的黑色和背景顏色爲灰色。這裏是相反的,下拉列表的背景顏色是黑色的,文字顏色是白色的。這也可以,但問題是,正如你在該圖像上看到的那樣,白色文本在灰色背景上幾乎看不見。

我試着定義新的TextView並應用新的適配器,但隻影響下拉列表的顏色。該項目被選中後,文本仍然是白色的。

spinner_text.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="left" 
    android:textColor="@android:color/black"   
/> 

適配器

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_text, values); 
spinner.setAdapter(adapter); 

我要的是同一個樣子這將是,如果我已經把佈局中的微調,其使用的活動。

回答

2

由於您爲您的應用程序設置了主題,您需要實現您的自定義適配器類併爲此實現SpinnerAdapter。

這裏是被選擇的索引項中針對該

public class CusSpinnerAdapter extends ArrayAdapter<String> 
    implements SpinnerAdapter{ 
    private LayoutInflater inflate; 
    private int resourceId; 
    private String[] options; 
    private int selIndex; 
    private Context context; 

    public CusSpinnerAdapter(Context context, int textViewResourceId, 
      String[] objects) { 
     super(context, textViewResourceId, objects); 
     this.context = context; 
     this.inflate = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     this.resourceId = textViewResourceId; 
     this.options = objects; 
    } 
    public void setSelectedIndex(int selIndex){ 
     this.selIndex = selIndex; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if(convertView==null){ 
      convertView = inflate.inflate(resourceId, null); 
      Holder holder = new Holder(); 
      holder.textView = (TextView)convertView.findViewById(R.id.spinner_item); 
      convertView.setTag(holder); 
     } 
     Holder holder = (Holder)convertView.getTag(); 
     holder.textView.setText(options[position]); 

     return convertView; 
    } 
    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     if(convertView==null){ 
      convertView = inflate.inflate(resourceId, null); 
      Holder holder = new Holder(); 
      holder.textView = (TextView)convertView.findViewById(R.id.spinner_item); 
      convertView.setTag(holder); 
     } 
     Holder holder = (Holder)convertView.getTag(); 
     holder.textView.setText(options[position]); 
     if(position==selIndex){ 
      holder.textView.setBackgroundColor(context.getResources().getColor(R.color.spinner_item_selected)); 
     }else 
      holder.textView.setBackgroundColor(context.getResources().getColor(R.color.spinner_item_default)); 

     return convertView; 
    } 
    private class Holder{ 
     TextView textView; 
    } 
} 

在該selIndex的例子。你需要實現這一點,因爲你確定選擇哪個項目並將其設置爲可繪製的項目。只需在所選的微調控件的項目上實現,並從中設置此適配器類的索引值。

這裏是另一種方式也

https://stackoverflow.com/a/4662939/760489

+0

而已。謝謝。選定項目(selIndex)的顏色不同的部分不適用於我。它僅爲第一個項目改變顏色。 – Cristiano 2013-02-16 13:18:34

1

把這些線在你的風格

<style name="mytheme" parent="@android:style/Theme.Dialog"> 
    <item name="android:textColor">#000000</item> 
</style> 

,然後在烏拉圭回合清單文件包括這種風格 像下面

<activity 
     android:name="com.agencymodel.views.TempOrderActivity"   
     android:theme="@style/mytheme" > 
    </activity>