Spinner提供了一个快速的方式从集合中选择值。在默认状态下,一个Spinner显示的是当前选择的值。触摸Spinner会显示一个下拉菜单,用户可以从中选择一个值。今天我们就开始Spinner的学习。
项目结构如下:
在xml文件中定义一个spinner,如下:
<Spinner android:id="@+id/spinner" android:layout_width="wrap_content" android:layout_height="wrap_content" />
在Spinner中增加一个选择列表,你需要在你的Activity或者Fragment代码中指定一个SpinnerAdapter。
在Spinner中增加一个选择列表
Spinner中的列表内容可以来自任何来源,但是需要一个SpinnerAdapter,比如如果选择内容是一个数组,那么Adapter是ArrayAdapter,再或者选择内容来自于数据库查询,那么Adapter是CursorAdapter。
例如如果选择内容是预先确定的,你可以在string的资源文件中指定一个array内容。
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="spinner_array"> <item>Linux</item> <item>Huhx</item> <item>LiuLi</item> <item>ChenHui</item> <item>Android</item> </string-array> </resources>
在Activity或者Fragment中提供一个ArrayAdapter的实例,如下:
spinner = (Spinner) findViewById(R.id.spinner); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.spinner_array, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item); spinner.setAdapter(adapter);
createFromResource方法允许你从一个字符数组中创建一个ArrayAdapter。第二个参数是在资源文件中定义的数组,第三个参数是定义spinner选择的方式。simple_spinner_item.xml如下:
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" style="?android:attr/spinnerItemStyle" android:singleLine="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="marquee" android:textAlignment="inherit"/>
然后你需要调用setDropDownViewResource方法去指定spinner列表中的布局:support_simple_spinner_dropdown_item.xml如下:
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" style="?attr/spinnerDropDownItemStyle" android:singleLine="true" android:layout_width="match_parent" android:layout_height="?attr/dropdownListPreferredItemHeight" android:ellipsize="marquee"/>
响应用户选择spinner的事件
当用户在下拉菜单中选择一行,Spinner对象接收一个on-item-selected事件:
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Log.i(TAG, "viewa: " + view + ", parent: " + parent + ", position: " + position + ", id: " + id); } @Override public void onNothingSelected(AdapterView<?> parent) { Log.i(TAG, "on nothing selected"); } });
运行效果如下:
时间: 2024-10-05 04:45:33