Spinner在android开发中也是用的比较多的一个控件,提供了类似于Web中一个下拉列表样式的输入控件。下面先给出一个比较简单的实例,这里我们没有自己去定义下来列表的布局,而是采用android系统提供的布局。效果图如下:
android给Spinner控件提供了这样一个属性:android:entries="@array/books" 它可以指定Spinner的下拉选项,我们可以看出来它的资源是一个array数组。
layout的xml内容:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Spinner
android:id="@+id/my_spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:entries="@array/books" />
</LinearLayout>
数组资源的xml代码:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="books">
<item >Windows</item>
<item >mac os</item>
<item >ubuntu</item>
<item >aix</item>
<item >Linux</item>
</string-array>
</resources>
下面activity代码,
public class SpinnerActivity extends Activity {
private Spinner mySpinner;
private myOnItemSelectedListener listener;
// 注意String[]类型的数组资源不能在UI上定义String[],而是定义一个CharSequence[]
private CharSequence[] os;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mySpinner = (Spinner) findViewById(R.id.my_spinner);
listener = new myOnItemSelectedListener();
// 定义一个CharSequence[] 去拿到String类型的数组
os = getResources().getTextArray(R.array.books);
mySpinner.setOnItemSelectedListener(listener);
}
private final class myOnItemSelectedListener implements OnItemSelectedListener {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getApplicationContext(), os[position], 1).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
}
这个spinner很简单的实现,在写代码的时候发现定义的数组资源在activity中要用CharSequence[]类型,没有自己去定义下拉列表的,后面将会写出一个自定义item的实例。
下面我又重新自己写了一个自定义下拉列表的Spinner,因为实际开发中一般都是要自己定义下拉item才能满足需求的,上图先看效果:
因为程序代码很简单,所以下面只给出下拉列表item的布局和activity代码,首先是下拉item的xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ImageView
android:id="@+id/spinner_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/check"
android:contentDescription="@string/what_description" />
<TextView
android:id="@+id/tv_os"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
activity代码,这里我是采用一个继承自BaseAdapter的内部来自定义下拉item的布局的:
public class MySpinnerActivity extends Activity {
private Spinner mySpinner;
private myBaseAdapter adapter;
private String[] os = new String[] { "windows", "mac os", "ubuntu", "linux", "android", "ios" };
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mySpinner = (Spinner) findViewById(R.id.myspinner);
adapter = new myBaseAdapter();
//mySpinner.setBackgroundColor(android.R.color.background_light);
mySpinner.setAdapter(adapter);
}
private final class myBaseAdapter extends BaseAdapter {
private LayoutInflater mInflater;
public myBaseAdapter() {
super();
mInflater = getLayoutInflater();
}
@Override
public int getCount() {
return os.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = mInflater.inflate(R.layout.spinner_item, null);
ImageView iv_spinner = (ImageView) view.findViewById(R.id.spinner_image);
iv_spinner.setImageResource(R.drawable.check);
TextView tv_os = (TextView) view.findViewById(R.id.tv_os);
tv_os.setText(os[position]);
return view;
}
}
}
如上N多废话,只是自己学习的总结。
- 大小: 17 KB
- 大小: 18.9 KB
分享到:
相关推荐
实例122: 在手机中编写一个翻译软件 458 实例123: 生成一个二维码 460 实例124: 使用Google Chart API生成二 维码 463 第11章 平板应用 469 实例125: 开发一个音乐播放器 469 实例126: 开发一个在线天气播报...
3.2 Android中的组件介绍 22 3.3 使用Android SDK帮助 23 3.3.1 Android SDK API文档 23 3.3.2 Android SDK开发指南 24 3.3.3 Android SDK samples 24 3.4 使用DDMS帮助调试程序 26 3.4.1 启动DDMS 26 3.4.2 ...
《Android应用开发揭秘》全部实例源代码,配合《Android应用开发揭秘》使用 前言 第一部分 准备篇 第1章 Android开发简介 1.1 Android基本概念 ... 17.3如何编写Android脚本程序 17.4小结
内容提要 -------------------------------------------------------------------------------- 国内第一本基于Android 2.0的经典著作,5大专业社区联袂推荐,权威性...17.3如何编写Android脚本程序 17.4小结
作者简介 杨丰盛,Android应用开发先驱,对Android有深入研究,实战经验极其丰富。精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件... 17.3如何编写Android脚本程序 17.4小结
本书作者较早就从事Android的研究与开发工作,为了帮助开发者更快地进入Android开发行列,他们不辞辛劳地编写了Android开发教程-《Google Android开发入门与实战》。本书系统讲解了Android软件开发的基础知识,...
spinner和cursor如何配合使用成了完成此实例过程中的难点,本来应该很简单,但却把我郁闷坏了。 先给大家贴上最终的效果图片: 界面的xml: XML/HTML代码 <?xml version=1.0 encoding=utf-8?> <...