custom_spinner_with_colors

DressesActivity.java

public class DressesActivity extends AppCompatActivity {

private Spinner spColor,spSize;

ArrayList<SpinnerModel> sl = new ArrayList<>();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_dresses);

initializeViews();

SpinnerModel a1 = new SpinnerModel();

a1.setColorName("pink");

a1.setColorCode("#ff0099");

SpinnerModel a2 = new SpinnerModel();

a2.setColorName("red");

a2.setColorCode("#ff2323");

SpinnerModel a3 = new SpinnerModel();

a3.setColorName("green");

a3.setColorCode("#178404");

sl.add(a1);

sl.add(a2);

sl.add(a3);

Resources resources= getResources();

CustomSpinnerAdapter customSpinnerAdapter = new CustomSpinnerAdapter(DressesActivity.this,

R.id.spinner_row_textview, sl,resources);

spColor.setAdapter(customSpinnerAdapter);

}

private void initializeViews() {

spColor = (Spinner) findViewById(R.id.activity_dresses_color_sp);

spSize = (Spinner) findViewById(R.id.activity_dresses_size_sp);

}

}

CustomSpinnerAdapter.java

public class CustomSpinnerAdapter extends ArrayAdapter<String>{

private Activity activity;

private ArrayList data;

public Resources res;

SpinnerModel tempValues=null;

LayoutInflater inflater;

/************* CustomAdapter Constructor *****************/

public CustomSpinnerAdapter(DressesActivity activitySpinner, int textViewResourceId,

ArrayList objects, Resources resLocal) {

super(activitySpinner, textViewResourceId, objects);

/********** Take passed values **********/

activity = activitySpinner;

data = objects;

res = resLocal;

/*********** Layout inflator to call external xml layout () **********************/

inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

@Override

public View getDropDownView(int position, View convertView,ViewGroup parent) {

return getCustomView(position, convertView, parent);

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

return getCustomView(position, convertView, parent);

}

// This funtion called for each row ( Called data.size() times )

public View getCustomView(int position, View convertView, ViewGroup parent) {

/********** Inflate spinner_rows.xml file for each row ( Defined below ) ************/

View row = inflater.inflate(R.layout.spinner_rows, parent, false);

/***** Get each Model object from Arraylist ********/

tempValues = null;

tempValues = (SpinnerModel) data.get(position);

TextView label = (TextView)row.findViewById(R.id.spinner_row_textview);

View squareFill= (View)row.findViewById(R.id.spinner_row_square);

if(position==0){

// Default selected Spinner item

label.setText("Please select color");

squareFill.setBackgroundResource(res.getIdentifier("com.purplemart.purplemart:drawable/ic_invert_colors_black_18dp",null,null));

}

else

{

// Set values for spinner each row

label.setText(tempValues.getColorName());

squareFill.setBackgroundColor(Color.parseColor(tempValues.getColorCode()));

}

return row;

}

}

spinner_rows.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="horizontal"

android:layout_width="match_parent"

android:layout_height="wrap_content">

<LinearLayout

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_margin="@dimen/bp_margin_3">

<View

android:id="@+id/spinner_row_square"

android:layout_width="@dimen/bp_margin_20"

android:layout_height="@dimen/bp_margin_20"

android:padding="@dimen/bp_margin_3"/>

<TextView

android:id="@+id/spinner_row_textview"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="@dimen/bp_margin_5"

android:text="Colour"

android:textSize="@dimen/bp_margin_11"/>

</LinearLayout>

</LinearLayout>

activity_dresses.xml

.....

<Spinner

android:id="@+id/activity_dresses_color_sp"

android:layout_width="0dp"

android:layout_weight="1"

android:layout_height="@dimen/margin_32">

</Spinner>.....

output:

Thank you .

---------------------------------------

Tutorial provided by Lokesh.

Program Logic is taken from AndroidExample.com.