Spinner的自定义

首先在main.xml中添加一个<Spinner/>

 

main.xml

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 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     <Spinner 
 8         android:id="@+id/mspinner"
 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 </LinearLayout>

这里,我自己写了一个background

mspinner_style.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <shape xmlns:android="http://schemas.android.com/apk/res/android">
 3     <stroke 
 4         android:width="0.5dp"
 5         android:color="#FFC0CB"/>
 6     <corners 
 7         android:radius="10dp"/>
 8     <solid 
 9         android:color="#FFB6C1"/>
10 </shape>

接着就是MainActivity.java了

MainActivity.java

 1 public class MainActivity extends Activity {
 2     private Spinner mSpinner;
 3     private String[] mItem;
 4     @Override
 5     protected void onCreate(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<String> arrayAdapter=new ArrayAdapter<>(this, 
13                 R.layout.adapter_style, mItem);
14         mSpinner.setAdapter(arrayAdapter);
15         
16         mSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
17 
18             @Override
19             public void onItemSelected(AdapterView<?> parent, View view,
20                     int position, long id) {
21                     String pString=parent.getItemAtPosition(position).toString();
22                     Toast.makeText(MainActivity.this, "您所选择的是:"+pString, 2000).show();
23             }
24 
25             @Override
26             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 <resources>
 3     <string-array name="spinneritem">
 4         <item>篮球</item>
 5         <item>足球</item>
 6         <item>羽毛球</item>
 7         <item>排球</item>
 8         <item>乒乓球</item>
 9         <item>橄榄球</item>
10     </string-array>
11 </resources>

在上面的java代码中不难发现,其实所谓Spinner的自定义,关键就在于适配器Adapter的设置,这里为了方便,我使用了最简单的ArrayAdapter

ArrayAdapter<String> arrayAdapter=new ArrayAdapter<>(thisR.layout.adapter_style, mItem);

这里第二个参数就是每个item的样式,在res/layout目录下

 

adapter_style.xml

1 <?xml version="1.0" encoding="UTF-8"?>
2 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
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=new BaseAdapter() {
 2             
 3             @Override
 4             public View getView(int position, View convertView, ViewGroup parent) {
 5                 LayoutInflater inflater=LayoutInflater.from(MainActivity.this);
 6                 convertView=inflater.inflate(R.layout.mitem,null);
 7                 return convertView;
 8             }
 9             
10             @Override
11             public long getItemId(int position) {
12                 // TODO Auto-generated method stub
13                 return 0;
14             }
15             
16             @Override
17             public Object getItem(int position) {
18                 // TODO Auto-generated method stub
19                 return null;
20             }
21             
22             @Override
23             public int getCount() {
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时:

posted @ 2015-07-20 22:31  Joe的学习笔记  阅读(536)  评论(0编辑  收藏  举报