Spinner is use to select single option from number of listed choice. For the better user interference this is very important to customize the spinner according to need of theme. In this tutorial i am covering some steps of spinner customization.
<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
Steps to use Spinner in your project.
- Crate a project in android studio.
- Open your main_activity.xml and update it-
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/activity_horizontal_margin"
android:orientation="vertical"
tools:context="com.pankaj.spinner.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Select value from default spinner" />
<!--_____________________________________________________-->
<!-- -->
<!-- create default spinner -->
<!--_____________________________________________________-->
<Spinner
android:id="@+id/spinner_default"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Select value from custom spinner" />
<!--_____________________________________________________-->
<!-- -->
<!-- create custom spinner -->
<!--_____________________________________________________-->
<Spinner
android:id="@+id/spinner_custom"
style="@style/spinner_style" />
</LinearLayout> - In the above main_activity.xml, i am using two types of spinners. First one spinner have default theme and last spinner have custom theme which is defined in style.xml. So open the style.xml and update it.
<!-- spinner styele-->
<style name="spinner_style">
<item name="android:background">@drawable/bg_spinner</item>
<item name="android:layout_margin">10dp</item>
<item name="android:paddingLeft">8dp</item>
<item name="android:paddingTop">5dp</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:paddingBottom">5dp</item>
</style> - Now your style.xml should be like this-
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<!-- spinner styele-->
<style name="spinner_style">
<item name="android:background">@drawable/bg_spinner</item>
<item name="android:layout_margin">10dp</item>
<item name="android:paddingLeft">8dp</item>
<item name="android:paddingTop">5dp</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:paddingBottom">5dp</item>
<!-- we can add some more properties here-->
</style>
</resources>
- Now see in your style, there are a custom drawable is used
<item name="android:background">@drawable/bg_spinner</item>
- So go to your resource directory and select your drawable directory and create new drawable resource file(selector)(drawable/bg_spinner.xml).
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<layer-list>
<item>
<shape>
<solid android:color="@android:color/white" />
<stroke android:width="1dp" android:color="@color/colorPrimary" />
<corners android:radius="5dp"></corners>
</shape>
</item>
<item>
<bitmap android:gravity="center|right" android:src="@drawable/dropdown_arrow" />
// you can use any other image here, instead of default_holo_dark_am
</item>
</layer-list>
</item>
</selector> - For the custom spinner a custom view will be required so create a layout(row_spinner.xml) in layout directory(res/layout/row_spinner.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="left|center"
android:orientation="horizontal">
<!--______________________________________________________________-->
<!-- -->
<!-- Looks of spinner options will be same as this textview -->
<!--______________________________________________________________-->
<TextView
android:id="@+id/tv_spinner"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:padding="5dp"
android:text="test"
android:textColor="@color/colorPrimary" />
</LinearLayout>
</LinearLayout> - Open your MainActivity.JAVA class and update it -
package com.pankaj.spinner;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
//create spinner object
private Spinner spinner_default, spinner_custom;
//create adapter objects
private ArrayAdapter arrayAdapterForDefault, arrayAdapterForCustom;
//create an arraylist for showing options
private ArrayList<String> optionList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//initialize object
spinner_default = (Spinner) findViewById(R.id.spinner_default);
spinner_custom = (Spinner) findViewById(R.id.spinner_custom);
//initialize options list
optionList = new ArrayList<>();
//add values for showing as options
for (int i = 1; i <= 100; i++) {
optionList.add("Option " + i);
}
//initialize adapters
arrayAdapterForDefault = new ArrayAdapter(this, android.R.layout.simple_spinner_item, optionList);
arrayAdapterForCustom = new ArrayAdapter(this, R.layout.row_spinner, R.id.tv_spinner, optionList);
//add adapters to spinners
spinner_default.setAdapter(arrayAdapterForDefault);
spinner_custom.setAdapter(arrayAdapterForCustom);
//add listener to both spinners
spinner_default.setOnItemSelectedListener(this);
spinner_custom.setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int possiton, long l) {
//add a switch case to differentiate options selected from which spinner.
switch (adapterView.getId()) {
//Toast will be shown when option will select from default spinner.
case R.id.spinner_default:
Toast.makeText(this, "Selected by default spinner \n" + optionList.get(possiton), Toast.LENGTH_SHORT).show();
break;
//Toast will be shown when option will select from custom spinner.
case R.id.spinner_custom:
Toast.makeText(this, "Selected by custom spinner \n" + optionList.get(possiton), Toast.LENGTH_SHORT).show();
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
} - Now all the development steps for Spinner has completed, Please run the application.
- Now select any option from first spinner and see the result on screen-


- Now select any option from second spinner and see the result on screen-

- Good bye, Thanks to read this blog.

No comments:
Post a Comment