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<>(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时:

时间: 2024-10-08 01:06:37

Spinner的自定义的相关文章

用ArrayAdapter来创建Spinner(自定义布局、默认布局、动态内容、静态内容)

         android:dropDownWidth 下拉列表宽度 android:dropDownHorizontalOffset 下拉列表距离左边的距离 android:dropDownVerticalOffset     下拉菜单和文本之间的垂直偏移量 android:popupBackground   下拉列表中的背景色 android:prompt 下拉列表中的提示信息(基本没用了) MainActivity.java package com.kale.spinner; imp

spinner使用自定义的Adapter

运行效果                    定义每一个Item的布局文件 <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="

Android之Socket通信、List加载更多、Spinner下拉列表

Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据.而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求. 那么,什么是socket?Socket又称套接字,在程序内部提供了与外界通信的端口,即端口通信.通过建立socket连接,可为通信双方的数

Android学习之导航--摘自黑马程序员

Android学习路线参考: 第三阶段:Android核心基础 什么是3G/4G.3G/4G网络的特点,掌握Android编程的基本概念与要点,Android SDK及其开发环境搭建.Android项目结构分析.Android应用设计模式.文件系统.文件形式的数据存储与访问.SDCard卡读写.使用SAX/DOM/PULL解析XML.SharedPreferences.Intent.IntentFilter.Android四大核心组件(Activity.BroadcastReceiver.Ser

【转】Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现)

原文网址:http://embed.21ic.com/software/android/201403/31603.html 1 :Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现) . 今天学习了Spinner组件,使用Spinner相当于从下拉列表中选择项目,下面演示一下Spinner的使用(分别使用ArrayAdapter和自定义Adapter实现) (一):使用ArrayAdapter进行适配数据: ①:首先定义一个布局文件: android:

Android 自定义Spinner和其下拉窗口

http://www.cnblogs.com/coding-way/p/3549865.html 现效果: 自定义Spinner其实包括两个部分: 第一部分是用来打开下拉列表的按钮,如图,这个绿色背景直接设置Spinner的背景就行,素材文件如下: 里面的文字需要注意下,Spinner控件没有直接修改文字的接口,这个文字实际上是在Adapter中设置,例如: ArrayAdapter<String> adapter = new ArrayAdapter<String>(getCon

Android中自定义下拉样式Spinner

Android中自定义下拉样式Spinner 本文继续介绍android自定义控件系列,自定义Spinner控件的使用. 实现思路 1.定义下拉控件布局(ListView及子控件布局) 2.自定义SpinerPopWindow类 3.定义填充数据的Adapter 效果图 一.定义控件布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http:/

使得spinner和spinner中item有不同的背景图片-------自定义spinner,设计出你想要的spinner!

遇到问题描述: spinner样式的使用,系统自带的不能说是一般的丑,并且跟你设计的风格完全不合拍,但对于spinner通过改变背景 图片的方式使其看起来更加的美观,更符合我们的审美设计.我遇到的问题是,对于item和spinner都设计为同一个背景图片,如果不同,当选择 item之后,item的值会直接把spinner中图片覆盖掉,使得spinner得不到预期的显示,但spinner和item中有相同的背景图片有不太合适.问题就是 使得spinner和spinner中item有不同的背景图片?

(转)Android 自定义 spinner (背景、字体颜色)

Android 自定义 spinner (背景.字体颜色) (2012-07-04 17:04:44)   1.准备两张图片,并做好9.png 2.在drawable中定义spinner_selector.xml <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" &