android Spinner控件详解
编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识、前端、后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过!
Spinner提供了从一个数据集合中快速选择一项值的办法。默认情况下Spinner显示的是当前选择的值,点击Spinner会弹出一个包含所有可选值的dropdown菜单,从该菜单中可以为Spinner选择一个新值。
spinner.png
上图显示的是Spinner常见的样式。这篇文章中我将讨论1.Spinner的基本用法 2.设置Spinner的Adapter (arrayadapter 和自定义BaseAdapter)3.Spinner的菜单显示方式 4.Spinner的xml属性
最简单的Spinner
在布局文件中添加Spinner控件
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Spinner
android:id="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:entries="@array/languages"
/>
</LinearLayout>
其中android:entries="@array/languages"表示Spinner的数据集合是从资源数组languages中获取的,languages数组资源定义在values/arrays.xml中:
<?xml version="1.0" encoding="utf-8"?> c语言 java php xml html 如果你不需要对Spinner的选择事件做响应,那么一个完整的Spinner使用流程就结束了。运行结果:
QQ图片20150105013559.jpg
当然,一般情况下我们是需要响应Spinner选择事件的,可以通过OnItemSelectedListener的回调方法实现
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Spinner spinner = (Spinner) findViewById(R.id.spinner1);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
String[] languages = getResources().getStringArray(R.array.languages);
Toast.makeText(MainActivity.this, "你点击的是:"+languages[pos], 2000).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// Another interface callback
}
});
}
}
上面的Spinner看起来非常漂亮,不过它并不是总是如此,刚刚看到的是在android:Theme.Holo.Light主题下的效果,同样的代码如果在android:Theme.Light下面就会变得很丑。
想必这也是很多人不想使用Spinner的原因了吧。如果想兼容2.3,则只能忍受这样的效果。
设置Spinner的Adapter
上面使用Spinner数据源于xml数组,其实用的最