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

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

有兴趣的可以找找源码。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值