`
keeponmoving
  • 浏览: 111483 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Andorid中的Spinner编写实例

 
阅读更多

 

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
分享到:
评论

相关推荐

    android开发实例大全_王东华

    实例122: 在手机中编写一个翻译软件 458 实例123: 生成一个二维码 460 实例124: 使用Google Chart API生成二 维码 463 第11章 平板应用 469 实例125: 开发一个音乐播放器 469 实例126: 开发一个在线天气播报...

    Android开发案例驱动教程 配套代码

    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应用开发揭秘》全部实例源代码,配合《Android应用开发揭秘》使用 前言  第一部分 准备篇  第1章 Android开发简介  1.1 Android基本概念 ... 17.3如何编写Android脚本程序  17.4小结

    Android应用开发揭秘pdf高清版

    内容提要 --------------------------------------------------------------------------------  国内第一本基于Android 2.0的经典著作,5大专业社区联袂推荐,权威性...17.3如何编写Android脚本程序 17.4小结

    《Android应用开发揭秘》源码

    作者简介  杨丰盛,Android应用开发先驱,对Android有深入研究,实战经验极其丰富。精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件... 17.3如何编写Android脚本程序  17.4小结

    Google.Android开发入门与实战

    本书作者较早就从事Android的研究与开发工作,为了帮助开发者更快地进入Android开发行列,他们不辞辛劳地编写了Android开发教程-《Google Android开发入门与实战》。本书系统讲解了Android软件开发的基础知识,...

    Android 个人理财工具四:添加账单页面 下

     spinner和cursor如何配合使用成了完成此实例过程中的难点,本来应该很简单,但却把我郁闷坏了。  先给大家贴上最终的效果图片:  界面的xml: XML/HTML代码 &lt;?xml version=1.0 encoding=utf-8?&gt; &lt;...

Global site tag (gtag.js) - Google Analytics