首先在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<>(this, R.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时:
原文:http://www.cnblogs.com/joeleedreamer/p/4662932.html