如何更改微调文本和背景颜色?

时间:2013-02-16 10:25:21

标签: android colors textview background-color android-spinner

我在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 个答案:

答案 0 :(得分: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中选择了索引项。您需要在确定选择了哪个项目并为项目设置选定的可绘制时实现此目的。只需在spinner控件选择的项目上实现,然后从该set中设置此适配器类的索引值。

这是另一种方式

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

答案 1 :(得分:2)

将这些行放在你的风格中

<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>