写在前面
需求: 需求就是我需要做一个选择天数的下拉框,一开始我选择的是PopupWindow+RecyclerView 我也写完了代码 写完以后发现 我的最外层的Dialog 是一个固定的高 最里层的RecyclerView 只能实现四五行的条目 有点不满足需求 后来就研究PopupWindow+Spinner 再发现 PopupWindow是一个容器 Spinner也是一个容器(脑壳疼) 又到了 单独的一个Spinner 完成了这个需求 下面开始上代码 上步骤.
1.Spinner是原生的Android控件
2.在布局中引入
<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:spinnerMode="dropdown"
android:dropDownHorizontalOffset="50dp"
android:dropDownVerticalOffset="-50dp"
android:id="@+id/yanqi_spinner"
android:entries="@array/day"
></Spinner>
(1) 关于android:dropDownHorizontalOffset 和android:dropDownVerticalOffset 属性 这俩个属性 是设置下拉框展开以后的偏移量的
android:dropDownHorizontalOffset="50dp" 是代表 水平偏移多少dp
android:dropDownVerticalOffset="-50dp" 是代表 垂直偏移多少dp(从控件开始渲染的位置Top)
(2)关于 android:entries="@array/day" 因为需求是选择天数 我是用了死数据
(3) 关于 android:spinnerMode="dropdown"此处有俩个子属性 一个底层是用PopupWindow实现的 dropdown 一个是用Dialog 实现的 dialog(默认的样式是dropdown)
3.上面是Spinner下拉框用死数据实现的
效果图:
4.还有一种实现方式是 用适配器添加网络数据的方式 因为这个需求我并没有做 适配器的方式(望见谅)
5.按照需求我需要把选择好的天数传到服务器,好 上代码
注意*****Spinner标签的监听器只能选择下面这个setOnItemSelectedListener,其他监听器会报错
,如果想取Spinner标签的下表不能直接取i,i,会打印Spinner标签的长度,已数组的方式打印出来,想取,取 l 下面的参数 long l 可以取到Spinner的下标
Spinner的id名.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
//获得选中的天数
String selectedItem = (String) yanqiSpinner.getSelectedItem();
//判断字符串不等于'请选择延期天数'
if (!selectedItem.equals("请选择延期天数")) {
tv_show_num.setText(selectedItem); //我自己的需求 看官不需要
} else {
//否侧Toast '请选择天数'
Toast.makeText(context, "请选择天数", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
6.网络请求的数据,展示到Spinner中,也是比较简单的一看就会
Spinner的子布局是一个TextView,这里就不贴了
7.简单的ArrayAdapter适配器
ArrayAdapter arrayAdapter =
new ArrayAdapter(getActivity(), 请的布局, 子布局TextView的id, 您要加载的数据(集合数据));
spinner.setAdapter(arrayAdapter);
到此Spinner常用的功能全部实现了,希望对您有所帮助。
为您推荐的是:
Android 开发常用的工具类(更新ing)