Android Spinner每行的背景不同

问题描述 投票:4回答:3

我知道这个话题已被多次解决,我发现了几个这样的问题,但我不能满足我的需要。我希望在spinner中有一个颜色列表。我这样做了,但我的旋转器是空的。

在我的OnCreate()

spinner = (Spinner) findViewById(R.id.spinner1); 
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
    this, R.array.androidcolors, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(
    android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter); 

在文件夹值中,我创建了一个文件colors.xml:

<resources>

<item name="blue" type="color">#FF33B5E5</item>
<item name="purple" type="color">#FFAA66CC</item>
<item name="green" type="color">#FF99CC00</item>
<item name="orange" type="color">#FFFFBB33</item>
<item name="red" type="color">#FFFF4444</item>
<item name="darkblue" type="color">#FF0099CC</item>
<item name="darkpurple" type="color">#FF9933CC</item>
<item name="darkgreen" type="color">#FF669900</item>
<item name="darkorange" type="color">#FFFF8800</item>
<item name="darkred" type="color">#FFCC0000</item>

<integer-array name="androidcolors">
    <item>@color/blue</item>
    <item>@color/purple</item>
    <item>@color/green</item>
    <item>@color/orange</item>
    <item>@color/red</item>
    <item>@color/darkblue</item>
    <item>@color/darkpurple</item>
    <item>@color/darkgreen</item>
    <item>@color/darkorange</item>
    <item>@color/darkred</item>
</integer-array>

</resources> 
java android arrays colors spinner
3个回答
11
投票

这很简单,你必须这样做

1.为微调器编写自己的自定义适配器,这是你如何做到的

class SpinnerAdapter extends BaseAdapter
{
    ArrayList<Integer> colors;
    Context context;

    public SpinnerAdapter(Context context) 
    {
        this.context=context;
        colors=new ArrayList<Integer>();
        int retrieve []=context.getResources().getIntArray(R.array.androidColors);
        for(int re:retrieve)
        {
            colors.add(re);
        }
    }
    @Override
    public int getCount() 
    {
        return colors.size();
    }
    @Override
    public Object getItem(int arg0) 
    {
            return colors.get(arg0);
    }
    @Override
    public long getItemId(int arg0) 
    {
        return arg0;
    }
    @Override
    public View getView(int pos, View view, ViewGroup parent) 
    {
        LayoutInflater inflater=LayoutInflater.from(context);
        view=inflater.inflate(android.R.layout.simple_spinner_dropdown_item, null);
        TextView txv=(TextView)view.findViewById(android.R.id.text1);
        txv.setBackgroundColor(colors.get(pos));
        txv.setTextSize(20f);
        txv.setText("Text  "+pos);
        return view;
    }

}

2.像这样设置适配器

spnColors=(Spinner)findViewById(R.id.spnColor);
spnColors.setAdapter(new SpinnerAdapter(this));

最终结果是

请接受答案,如果有帮助!


0
投票

您可能希望显示更多代码,很难确切地知道3行代码发生了什么:)

尝试将Integer数组移动到values文件夹中名为array.xml的文件中。

<?xml version="1.0" encoding="utf-8"?> <resources> <integer-array name="androidcolors"> <item>@color/blue</item> <item>@color/purple</item> <item>@color/green</item> <item>@color/orange</item> <item>@color/red</item> <item>@color/darkblue</item> <item>@color/darkpurple</item> <item>@color/darkgreen</item> <item>@color/darkorange</item> <item>@color/darkred</item> </integer-array> </resources>


0
投票

如果我理解正确,你想为每个Spinner项目显示颜色本身?您可以通过创建自定义适配器并覆盖getDropDownView()轻松实现。

举个例子:

public class CustomSpinnerAdapter extends ArrayAdapter<CharSequence>
{
    private List<Integer> mColors;

    public CustomSpinnerAdapter(Context context, List<CharSequence> items, List<Integer> colors)
    {
        super(context, android.R.layout.simple_spinner_item, items);
        mColors = colors;
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent)
    {
        View view = super.getDropDownView(position, convertView, parent);
        applyColor(view, position);
        return view;
    }

    private void applyColor(View view, int position)
    {
        view.setBackgroundColor(mColors.get(position));

        // You can change the TextView if you want (in addition to or instead of the background).
        TextView text = (TextView)view.findViewById(android.R.id.text1);
        text.setTextColor(mColors.get(position));
    }
}

当然,您也可以创建自定义视图并将其返回。

© www.soinside.com 2019 - 2024. All rights reserved.