遇到这样一个需求,找了很久只找到能修改初始文字的颜色,不能改列表中的颜色。最后解决的实现方法是新写一个adapter去继承ArrayAdapter,在使用这个adapter的时候,传入点击的位置,然后在adapter里改变颜色。
以下为自定义的adapter:
import android.content.Context; import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; public class TestArrayAdapter extends ArrayAdapter<String> { private Context mContext; private String [] mStringArray; private int type; public TestArrayAdapter(Context context, String[] stringArray) { super(context, android.R.layout.simple_spinner_item, stringArray); mContext = context; mStringArray=stringArray; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { //修改Spinner展开后的字体颜色 if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(mContext); convertView = inflater.inflate(android.R.layout.simple_spinner_dropdown_item, parent,false); } //此处text1是Spinner默认的用来显示文字的TextView TextView tv = (TextView) convertView.findViewById(android.R.id.text1); tv.setText(mStringArray[position]); tv.setTextSize(20f); tv.setTextColor(Color.BLACK); //根据点击位置改变颜色 if(position == type){ tv.setTextColor(Color.RED); } return convertView; } @Override public View getView(int position, View convertView, ViewGroup parent) { // 修改Spinner选择后结果的字体颜色 if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(mContext); convertView = inflater.inflate(android.R.layout.simple_spinner_item, parent, false); } return convertView; } public void setType(int type) { this.type = type; } }以下为mainActivity里的使用:
spinner = (Spinner) view.findViewById(R.id.spinner); private String[] sortList = new String[]{"呀哈哈1","呀哈哈2","呀哈哈3","呀哈哈4","呀哈哈5"}; TestArrayAdapter arrayAdapter = new TestArrayAdapter(getActivity(),sortList); spinner.setAdapter(arrayAdapter); spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { //此处设置选中后的TextView属性 TextView tv = (TextView) view; tv.setTextColor(getResources().getColor(R.color.black)); //将点击的序号传入adapter arrayAdapter.setType(i); //点击后要使用的方法fun(i);
}
@Override public void onNothingSelected(AdapterView<?> adapterView) {
}
});