首先在main.xml中添加一个
main.xml
1
2 xmlns:tools="http://schemas.android.com/tools"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 tools:context="com.jorlee.myspinner.MainActivity" >
6
7
9 android:layout_width="match_parent"
10 android:layout_height="50dp"
11 android:layout_margin="20dp"
12 android:animationCache="true"
13 android:background="@drawable/mspinner_style"/>
14
15
这里,我自己写了一个background
mspinner_style.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2
3
5 android:color="#FFC0CB"/>
6
8
10
接着就是MainActivity.java了
MainActivity.java
1 public class MainActivity extendsActivity {2 privateSpinner mSpinner;3 privateString[] mItem;4 @Override5 protected voidonCreate(Bundle savedInstanceState) {6 super.onCreate(savedInstanceState);7 setContentView(R.layout.activity_main);8
9 mSpinner=(Spinner) findViewById(R.id.mspinner);10 mItem=getResources().getStringArray(R.array.spinneritem);11
12 ArrayAdapter arrayAdapter=new ArrayAdapter<>(this,13 R.layout.adapter_style, mItem);14 mSpinner.setAdapter(arrayAdapter);15
16 mSpinner.setOnItemSelectedListener(newOnItemSelectedListener() {17
18 @Override19 public void onItemSelected(AdapterView>parent, View view,20 int position, longid) {21 String pString=parent.getItemAtPosition(position).toString();22 Toast.makeText(MainActivity.this, "您所选择的是:"+pString, 2000).show();23 }24
25 @Override26 public void onNothingSelected(AdapterView>parent) {27 //TODO Auto-generated method stub
28
29 }30
31 });32 }33
34 }
这里我把需要显示在Spinner里的内容用一个简单的String数组表示,在res/values目录下
m_spinner_item.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2
3
4 篮球
5 足球
6 羽毛球
7 排球
8 乒乓球
9 橄榄球
10
11
在上面的java代码中不难发现,其实所谓Spinner的自定义,关键就在于适配器Adapter的设置,这里为了方便,我使用了最简单的ArrayAdapter
ArrayAdapter arrayAdapter=new ArrayAdapter<>(this, R.layout.adapter_style, mItem);
这里第二个参数就是每个item的样式,在res/layout目录下
adapter_style.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2
3 style="?android:attr/spinnerDropDownItemStyle"
4 android:singleLine="true"
5 android:layout_width="fill_parent"
6 android:textSize="25sp"
7 android:textColor="#DC143C"
8 android:layout_margin="10dp"
9 android:layout_height="?android:attr/listPreferredItemHeight"/>
可见,每个item都是一个简单的TextView
当然,还有很多其他的适配器可以用,比如用BaseAdapter
1 BaseAdapter baseAdapter=newBaseAdapter() {2
3 @Override4 public View getView(intposition, View convertView, ViewGroup parent) {5 LayoutInflater inflater=LayoutInflater.from(MainActivity.this);6 convertView=inflater.inflate(R.layout.mitem,null);7 returnconvertView;8 }9
10 @Override11 public long getItemId(intposition) {12 //TODO Auto-generated method stub
13 return 0;14 }15
16 @Override17 public Object getItem(intposition) {18 //TODO Auto-generated method stub
19 return null;20 }21
22 @Override23 public intgetCount() {24 //TODO Auto-generated method stub
25 return 5;26 }27 };
只需在getView()方法中只需
LayoutInflater inflater=LayoutInflater.from(MainActivity.this);
convertView=inflater.inflate(R.layout.mitem,null);其中mitem.xml是写在res/layout 目录下的一个xml文件,它是每个item的布局,可以自定义。
最后,只需要为mSpinner.setAdapter(baseAdapter);即可。
贴上效果图:
使用arrayAdapter时:
使用BaseAdapter时: