我正在开发一个为用户提供两个图形对象的应用程序。每个对象与相应的微调器相关联,用户可以从中选择少数属性中的一个。触摸一个微调器会停用另一个微调器(这是在spinner.setEnabled之外处理的。)
视图包含一个搜索栏,用户可以从中控制应用于最近选择的属性的值范围。
颜色是其中一个属性。当搜索栏移动时,我可以更改弹出项目的背景颜色。我需要将所有项目的文本颜色设置为浅色背景颜色,白色设置为所有深色。
if ( pos == object.COLOR_INDEX) {
//change spinner Background and Text color
spinner.setBackgroundColor(Colors.BACKGROUND[objectCurrent.getParams(pos)]);
TextView v ; int ct ;
for(int i=0; i<(ct=spinner.getChildCount()); ++i) {
v= (TextView)spinner.getChildAt(i);
v.setTextColor(Colors.FOREGROUND[objectCurrent.getParams(pos)]);
}
ColorDrawable drawable=(ColorDrawable) spinner.getBackground() ;
spinner.setPopupBackgroundDrawable(drawable);
spinner.setSelection(0); spinner.setSelection(pos);
}
我还没有办法做到这一点。循环遍历spinner.getChildAt(i)仅影响当前显示的项目,而不影响弹出窗口中隐藏的项目。
我将不胜感激。
答案 0 :(得分:0)
这显然可以解决问题:
Resources res=getResources();
final List<String> spinnerItems=new ArrayList<String>(Arrays.asList(res.getStringArray(R.array.spin_settings)));
ArrayAdapter<String> aa=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,spinnerItems){
public View getDropDownView(int position, View convertView,
ViewGroup parent) {
View v = super.getDropDownView(position, convertView,
parent);
((TextView) v).setTextColor(Colors.FOREGROUND[obj.getParams(param.COLOR_INDEX)]);
((TextView) v).setBackgroundColor(Colors.BACKGROUND[obj.getParams(param.COLOR_INDEX)]);
return v;
}
};
aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerLeft.setAdapter(aa);
spinnerRight.setAdapter(aa);
似乎会为下拉列表中的每个项目引发getDropDownView事件。