0

我放了一个微调器,AlertDialog由于某种原因,那里的颜色显示与正常活动不同。这让我想到了这个问题:

安卓微调器

当我在正常活动中使用该微调器时,文本颜色为黑色,下拉列表的背景颜色为灰色。相反,下拉列表的背景颜色为黑色,文本颜色为白色。这也可以,但问题是,正如您在该图像上看到的那样,白色文本在该灰色背景上几乎不可见。

我试图定义新的 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);

如果我在布局中放置了一个由活动使用的微调器,我想要的只是看起来一样。

4

2 回答 2

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

于 2013-02-16T10:42:53.293 回答
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>
于 2013-05-09T10:52:33.913 回答