Question

I know that this topic has been addressed many times, I found several questions like this but I can not fit my need. I want to have a list of colors in a spinner. I did so, but my spinner is empty.

In my 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); 

and In folder values I created a file 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> 
Was it helpful?

Solution

It's easy , you have to

1.Write your own custom adapter for spinner, here is how you do it

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.Set the adapter like this

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

Final Result is

color spinner

Do Accept Answer, If it helps!

OTHER TIPS

If I understand correctly, you want to show the color itself for each Spinner item? You can easily do that by creating a custom Adapter and overriding getDropDownView().

As an example:

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));
    }
}

Of course, you can also create a custom view and return it.

You might want to show some more code, it's hard to tell exactly what's going on with 3 lines of code :)

Try to move the Integer array to it's own file called array.xml in the values folder.

<?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>

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top