Spinner有2种状态,第一种是收缩的情况下只显示第一条,第二种是下拉状态显示所有的条目。可以通过自定义adapter类客户化不同条目的颜色。
//创建列表 ArrayList<String> sortedFN=new ArrayList<String>(); for (int i = 0; i < FileNMstrs.size(); i++) { sortedFN.add(FileNMstrs.get(tranferSequence(i))); } //初始化适配器 SpinnerAdapter arr_adapter= new SpinnerAdapter(MapActivity.this, android.R.layout.simple_spinner_item, android.R.id.text1,sortedFN); //设置下拉样式 arr_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //加载适配器 fileListSpinner.setAdapter(arr_adapter);
在SpinnerAdapter中定义颜色,自定义的SpinnerAdapter可以继承ArrayAdapter也可以继承simpleAdapter,根据需要显示的数据来选择。要显示的数据是列表就选择arrayadapter,如果数据是键值对就选择map。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; import com.example.myapplication.storage.ColorChanger; import java.util.ArrayList; /** * Created by Administrator on 2017/8/9. */ public class SpinnerAdapter extends ArrayAdapter { private LayoutInflater infalter; private int resource; private int textViewResourceId; private ArrayList<String> target; public SpinnerAdapter(Context context, int resource, int textViewResourceId, ArrayList<String> objects) { super(context, resource, textViewResourceId, objects); this.resource = resource; this.textViewResourceId = textViewResourceId; target = objects; infalter = LayoutInflater.from(context); } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) convertView = infalter.inflate(resource, null); TextView text = (TextView) convertView .findViewById(textViewResourceId); text.setText(target.get(position)); text.setTextColor(ColorChanger.nextColor(position)); return convertView; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { if (convertView == null) convertView = infalter.inflate( android.R.layout.simple_list_item_1, null); TextView text = (TextView) convertView .findViewById(android.R.id.text1); text.setText(target.get(position)); text.setTextColor(ColorChanger.nextColor(position)); return convertView; } }
getView
getview是没有下拉的情况下,显示出来的内容,就是第一行。而getDropDownView是下拉情况下,显示出来所有的行。要设置下拉情况下不同行的风格style,需要写getDropDownView。网上很多教程都是只修改getview,其实不对。
最后说一下android.R.layout.simple_spinner_item, android.R.id.text1这都是android自带的控件。simple_spinner_item只有一个控件,id就是text1的textview。所以getDropDownView中按照simple_spinner_item来创建convertView,然后按照id.text1来找到textview,设置text内容和颜色。
有兴趣的可以找找源码。