android Spinner控件设置下拉状态的条目item字体颜色

来源:互联网 发布:apache转发至python 编辑:程序博客网 时间:2024/06/11 17:50

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内容和颜色。

有兴趣的可以找找源码。

原创粉丝点击