android里的Spinner其实就是个ComboBox =。=
一。基本使用方法:
main.xml 不多解释
<?
xml version="1.0" encoding="utf-8"
?>
<
LinearLayout
xmlns:android
="http://schemas.android.com/apk/res/android"
android:orientation
="vertical"
android:layout_width
="fill_parent"
android:layout_height
="fill_parent"
>
<
Spinner
android:id
= "@+id/mySpinner"
android:layout_width
= "fill_parent"
android:layout_height
="wrap_content"
/>
</
LinearLayout
>
在string.xml中使用“string-array”定义数据源。
<?
xml version="1.0" encoding="utf-8"
?>
<
resources
>
<
string
name
="app_name"
>
MySpinnerDemo
</
string
>
<
string-array
name
= "phones_array"
>
<
item
>
iPhone
</
item
>
<
item
>
Android
</
item
>
<
item
>
BlackBerry
</
item
>
</
string-array
>
</
resources
>
Activity类:
package
com.yinger;
import
android.app.Activity;
import
android.os.Bundle;
import
android.view.View;
import
android.widget.AdapterView;
import
android.widget.ArrayAdapter;
import
android.widget.Spinner;
import
android.widget.AdapterView.OnItemSelectedListener;
/**
* Spinner Demo
*
@author
Yinger
* @time 2011-7-9 下午01:54:59
* @mail melody.crazycoding@gmail.com
*/
public
class
SpinnerDemo
extends
Activity {
Spinner spinner
=
null
;
String selected
=
"
0
"
;
/**
Called when the activity is first created.
*/
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
spinner
=
(Spinner)findViewById(R.id.mySpinner);
initMySpinner();
}
private
void
initMySpinner() {
ArrayAdapter
<
CharSequence
>
adapter
=
ArrayAdapter.createFromResource(
this
, R.array.phones_array,
android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setPrompt(
"
test
"
);
spinner.setOnItemSelectedListener(
new
SpinnerOnSelectedListener());
}
class
SpinnerOnSelectedListener
implements
OnItemSelectedListener{
public
void
onItemSelected(AdapterView
<?>
adapterView, View view,
int
position,
long
id) {
//
TODO Auto-generated method stub
selected
=
adapterView.getItemAtPosition(position).toString();
System.out.println(
"
selected===========>
"
+
selected);
}
public
void
onNothingSelected(AdapterView
<?>
arg0) {
//
TODO Auto-generated method stub
System.out.println(
"
selected===========>
"
+
"
Nothing
"
);
}
}
}
二。debug发现的一个小问题:
Spinner在初始化时会自动调用一次OnItemSelectedListener事件
原因:有人说是Bug,其实这与C#的事件机制类似,懒得说了=。=
提供的解决办法:
个人是通过在事件注册之前调用
spinner.setSelection(
0
,
true
);
但要注意,使用此方法,如果用户选择的也是第一项,那么OnItemSelectedListener事件不会被触发……
三。使用技巧
1.动态添加Spinner的数据源
修改initMySpinner方法,代码如下:
private
void
initMySpinner() {
String[] phones
=
{
"
iPhone
"
,
"
Android
"
,
"
BlackBerry
"
};
ArrayAdapter
<
String
>
adapter
=
new
ArrayAdapter
<
String
>
(
this
, android.R.layout. simple_spinner_item,
phones);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setPrompt(
"
test
"
);
spinner.setSelection(
0
,
true
);
spinner.setOnItemSelectedListener(
new
SpinnerOnSelectedListener());
}
2.自定义Spinner的Layout,替换掉体统默认的android.R.layout.simple_spinner_item
super
easy
my_spinner_item.xml:
<?
xml version="1.0" encoding="utf-8"
?>
<
TextView
xmlns:android
="http://schemas.android.com/apk/res/android"
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
android:textSize
="12dip"
android:textColor
="#FF8B1500"
android:gravity
="center"
/>
修改adapter:
ArrayAdapter
<
String
>
adapter
=
new
ArrayAdapter
<
String
>
(
this
, R.layout.my_spinner_item,
phones);
同理,可自定义layout,替换掉android.R.layout.simple_spinner_dropdown_item
3.同时显示图片和文本
自定义Adapter:
package
com.yinger;
import
android.content.Context;
import
android.graphics.Color;
import
android.view.Gravity;
import
android.view.View;
import
android.view.ViewGroup;
import
android.widget.BaseAdapter;
import
android.widget.ImageView;
import
android.widget.LinearLayout;
import
android.widget.TextView;
/**
* 自定义Adapter
*
@author
Yinger
* @time 2011-7-9 下午03:39:34
* @mail melody.crazycoding@gmail.com
*/
public
class
MyAdapter
extends
BaseAdapter {
private
Context ctx;
private
int
drawableIDs[];
private
int
stringIDs[];
public
MyAdapter(Context ctx,
int
DrawableIDs[],
int
StringIDs[])
{
this
.ctx
=
ctx;
this
.drawableIDs
=
DrawableIDs;
this
.stringIDs
=
StringIDs;
}
public
int
getCount() {
//
TODO Auto-generated method stub
return
drawableIDs.length ;
}
public
Object getItem(
int
position) {
//
TODO Auto-generated method stub
return
drawableIDs [position];
}
public
long
getItemId(
int
position) {
//
TODO Auto-generated method stub
return
position;
}
public
View getView(
int
position, View convertView, ViewGroup parent) {
//
TODO Auto-generated method stub
LinearLayout ll
=
new
LinearLayout( ctx );
ll.setOrientation(LinearLayout. HORIZONTAL );
ll.setGravity(Gravity. CENTER_VERTICAL );
ImageView iv
=
new
ImageView( ctx );
iv.setImageResource( drawableIDs [position]);
iv.setLayoutParams(
new
ViewGroup.LayoutParams(
100
,
40
));
ll.addView(iv);
TextView tv
=
new
TextView( ctx );
tv.setText( stringIDs [position]);
tv.setTextSize(
14
);
tv.setTextColor(Color.BLUE );
ll.addView(tv);
return
ll;
}
}
修改initMySpinner方法:
private
void
initMySpinner() {
int
[] phonePics
=
{R.drawable.apple,R.drawable.android,R.drawable.blackberry};
int
[] phones
=
{ R.string.iphone, R.string.android, R.string.blackberry};
MyAdapter adapter
=
new
MyAdapter(
this
,phonePics,phones);
spinner.setAdapter(adapter);
spinner.setPrompt(
"
test
"
);
spinner.setSelection(
0
,
true
);
}
运行结果截图:
OK,但使用自定义的Adapter,我们如何来获取选中的文本信息呢?
在MyAdapter中,修改getView方法,添加黄色区域代码如下:
public
View getView(
int
position, View convertView, ViewGroup parent) {
//
TODO Auto-generated method stub
LinearLayout ll
=
new
LinearLayout( ctx );
ll.setOrientation(LinearLayout. HORIZONTAL );
ll.setGravity(Gravity. CENTER_VERTICAL );
ImageView iv
=
new
ImageView( ctx );
iv.setImageResource( drawableIDs [position]);
iv.setLayoutParams(
new
ViewGroup.LayoutParams(
100
,
40
));
ll.addView(iv);
TextView tv
=
new
TextView( ctx );
tv.setText( stringIDs [position]);
tv.setTextSize(
14
);
tv.setTextColor(Color.BLUE );
tv.setTag(
"
tagTextView
"
);
ll.addView(tv);
return
ll;
}
重写事件中的onItemSelected方法:
//
TODO Auto-generated method stub
public
void
onItemSelected(AdapterView
<?>
adapterView, View view,
int
position,
long
id) {
if
(adapterView.getId()
==
R.id.mySpinner)
{
LinearLayout ll
=
(LinearLayout)view;
TextView tv
=
(TextView)ll.findViewWithTag(
"
tagTextView
"
);
String str
=
(String)tv.getText();
System.out.println(
"
selected===========>
"
+
str);
}
}
最后,别忘了注册该事件。=。=
转自:http://www.blogjava.net/crazycoding/archive/2011/07/09/353981.html
分享到:
相关推荐
Spinner 使用方法小结 private void initMySpinner() { ArrayAdapter adapter = ArrayAdapter.createFromResource( this, R.array.phones_array, android.R.layout.simple_spinner_item); adapter....
Android中常见的弹框:Spinner、Dialog、PopupMenu、PopupWindow等控件基本使用总结
最近写一个使用Spinner实现城市级联下拉框的Dome,现在总结一下,第一次写博客,互相学习。 activity_main.xml里面有三个Spinner <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android ...
本文较为详细的总结分析了Android编程下拉菜单spinner用法。分享给大家供大家参考,具体如下: Spinner控件也是一种列表类型的控件,它的继承关系如下: java.lang.Object ↳ android.view.View ↳ android....
1.5小结 第2章搭建你的开发环境 2.1配置前的准备工作 2.1.1 Android支持的操作系统 2.1.2准备“四大法宝” 2.2安装并配置JDK 2.2.1 安装JDK 2.2.2配置JDK 2.3安装并配置Eclipse 2.3.1 运行Eclipse 2.3.2 了解Eclipse...
1.5小结 第2章搭建你的开发环境 2.1配置前的准备工作 2.1.1 Android支持的操作系统 2.1.2准备“四大法宝” 2.2安装并配置JDK 2.2.1 安装JDK 2.2.2配置JDK 2.3安装并配置Eclipse 2.3.1 运行Eclipse 2.3.2 了解Eclipse...
1.8 小结 第2章 设置开发环境 2.1 设置环境 2.1.1 下载JDK 6 2.1.2 下载Eclipse 3.6 2.1.3 下载Android SDK 2.1.4 命令行窗口 2.1.5 安装ADT 2.2 了解基本组件 2.2.1 View 2.2.2 ...
1.8 小结 第2章 设置开发环境 2.1 设置环境 2.1.1 下载JDK 6 2.1.2 下载Eclipse 3.6 2.1.3 下载Android SDK 2.1.4 命令行窗口 2.1.5 安装ADT 2.2 了解基本组件 2.2.1 View 2.2.2 ...
1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种基本结构 25 2.1.3 面向对象程序设计简介 27 2.1.4 面向对象的基本特征 28 2.2 UML...
1.6 本章小结 / 33 .第2章 从“hello world”开始 / 34 2.1 获取ext js 4 / 34 2.2 配置使用ext js库 / 35 2.3 编写“hello world”程序 / 37 2.4 关于ext.onready / 38 2.5 关于ext.blank_image_url / 40 ...
1.7 本章小结 33 第2章 Android应用的界面编程 35 2.1 界面编程与视图(View)组件 36 2.1.1 视图组件与容器组件 36 2.1.2 使用XML布局文件控制UI 界面 40 2.1.3 在代码中控制UI界面 41 2.1.4 使用...
第1章 Android应用与开发环境 1 1.1 Android的发展和历史 2 1.1.1 Android的发展和简介 2 1.1.2 Android平台架构及特性 3 1.2 搭建Android开发环境 5 1.2.1 下载和安装Android SDK 5 ...19.10 本章小结 689
第1章 Android应用与开发环境 1 1.1 Android的发展和历史 2 1.1.1 Android的发展和简介 2 1.1.2 Android平台架构及特性 3 1.2 搭建Android开发环境 5 1.2.1 下载和安装Android SDK 5 ...19.10 本章小结 689
《Android应用开发揭秘》全部实例源代码,配合《Android应用开发揭秘》使用 前言 第一部分 准备篇 第1章 Android开发简介 1.1 Android基本概念 1.1.1 Android简介 1.1.2 Android的系统构架 ... 17.4小结
作者简介 杨丰盛,Android应用开发先驱,对Android有深入研究,实战经验极其丰富。精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件开发方面有非常深厚的积累。... 17.4小结
目录 第一篇 Android开发初步 第1章 Android初识 1.1 Android简介 1.1.1 认识Android 1.1.2 Android系统框架 1.1.3 应用程序框架 1.2 Eclipse开发环境 1.2.1 安装ADT插件 1.2.2 安装SDK ...16.7 本章小结