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>
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
Do Accept Answer, If it helps!
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With