最近需要做一个功能,在ListView的每个item里有个类似下拉列表的东西,我第一反应就是选择用Spinner控件。一开始我纠结android原生的Spinner右边的图标如何换成其他的图标,在经历了3个多小时的查阅资料,发现并不能换,于是我就想到能否直接给Spinner添加Background,我根据这个想法就开始做起来,最终我完成了和效果图一样的功能实现。
接下来,把我做Spinner过程中的注意点告诉大家 与大家分享:
首先,最上面一行是Spinner未展开的样式,我们只要设置它的Background就好了:
<Spinner
android:id="@+id/spinner"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="40dp"
android:background="@drawable/spinner_bag"
android:spinnerMode="dropdown" /> //spinnerMode表示下拉列表显示的方式
然后就直接在代码里编写Spinner:
final String[] mItems = mContext.getResources().getStringArray(R.array.finish_time);//从Values里面直接获取数组资源
ArrayList<String> arrayList = new ArrayList<>();
for (int i = 0; i < mItems.length; i++) {
arrayList.add(mItems[i]);
}
ArrayAdapter adapter = new ArrayAdapter(mContext,android.R.layout.simple_spinner_item,arrayList);//此处的android.R.layout.simple_spinner_item为Android原生的Spinner未展开时的布局,我们不用动它,arrayList为Spinner下拉列表里的数据集
adapter.setDropDownViewResource(R.layout.spinner_down);//这里的R.layout.spinner_down则是我们自己定义的布局
holder.spinner.setAdapter(adapter);
/**
* Spinner 监听事件
*/
holder.spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String[] finish_time = mContext.getResources().getStringArray(R.array.finish_time);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
好啦,到这里基本上就算结束啦~ 还差最后一步!! Spinner基本算写完了,但唯一的问题是它的样式还是和我们预期的不一样,我也是搞了好久,最终发现要在MainFest清单文件里找到Spinner存在的当前Activity,为此Activity添加如下Theme,至此,无论你想要什么样式的下拉列表应该都没问题了~ 哦对了,类似的下拉列表,网上还有其他的用TextView+PopWindow的实现,大家可以去参考一下哇~
android:theme="@android:style/Theme.Holo.Light"
推荐一篇Spinner的详解文章点击打开链接