Android Spinner 下拉框简单应用 详细注解
@
Android Spinner
Spinner 提供下拉列表式的输入方式,该方法可以有效节省手机屏幕上的显示空间。
本次我将使用最简单的Spinner来完成一个下拉框。完成的功能如下面的动图
代码部分
Spinner代码介绍
list_Q.add("区县");//下拉框列表,用于存储下拉的内容
adapter_Q = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_Q);
//创建adpter适配器(必须)。
//R.layout.support_simple_spinner_dropdown_item,spinner框样式,这里我使用的都是默认的。
spinner_Q.setAdapter(adapter_Q);//spinner绑定adpter,到这里你的下拉框已经可以显示了。
//spinner_Q.setEnabled(false);//设置spinner不可操作
//设置spinner的选择监听事件
spinner_Q.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
adapter_Q = new ArrayAdapter(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_Q);
这里是自定义选择填充后的字体样式
adapter_Q .setDropDownViewResource(R.layout.item_drop); 自定义下拉的字体样式
这样式你都可以自己写一个XMAL文件,我的使用的都是默认的就不在这里解释了android:dropDownSelector:列表框被选中时的背景
下面引用一个博主的内容
android:dropDownWidth:设置下拉列表框的宽度
android:gravity:设置里面组件的对其方式
android:popupBackground:设置列表框的背景
android:prompt:设置对话框模式的列表框的提示信息(标题),只能够引用string.xml中的资源id,而不能直接写字符串
android:spinnerMode:列表框的模式,有两个可选值:dialog:对话框风格的窗口
dropdown:下拉菜单风格的窗口(默认) android:overlapAnchor =
false:设置下拉框不覆盖显示框。(重要!!!) 可选属性:android:entries:使用数组资源设置下拉列表框的列表项目
———————————————— 版权声明:本文为CSDN博主「北极熊的微笑」的原创文章,遵循 CC 4.0 BY-SA
版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lpCrazyBoy/article/details/80748334
核心代码
private List<String> list_P= new ArrayList<>();//省下拉框列表
private List<String> list_C= new ArrayList<>();//市下拉框列表
private List<String> list_Q= new ArrayList<>();//区县下拉框列表
private List<String> list_TP= new ArrayList<>();//类型下拉框列表
private ArrayAdapter<String> adapter_P;//省列表的适配器
private ArrayAdapter<String> adapter_C;//市列表的适配器
private ArrayAdapter<String> adapter_Q;//区县列表的适配器
private ArrayAdapter<String> adapter_TP;//类型列表的适配器
private Button btn_eq_ok ;//查询按钮
private Spinner spinner_P;//省下拉框
private Spinner spinner_C;//市下拉框
private Spinner spinner_Q;//区县下拉框
private Spinner spinner_TP;//类型下拉框
public static equipmentFragment newInstance() {
return new equipmentFragment();
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.equipment_fragment, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mViewModel = ViewModelProviders.of(this).get(EquipmentViewModel.class);
// TODO: Use the ViewModel
init_Palette();//初始化控件
init_hashmap();//初始化hashmap。
//初始化省下拉框
list_P.add("省");
adapter_P = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_P);
spinner_P.setAdapter(adapter_P);
spinner_P.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
if (adapter_P.getItem(i).equals("省")){
list_C.clear();
list_C.add("市");
adapter_C = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_C);
spinner_C.setAdapter(adapter_C);
}else{
list_C.clear();
list_C.add("市");
mapTool_getList(c_Hashmap,list_C,mapTool_getKey(p_Hashmap,adapter_P.getItem(i)),2);
adapter_C = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_C);
spinner_C.setAdapter(adapter_C);
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
spinner_C.setEnabled(false);
}
});
/***
* 初始化市下拉框
*/
list_C.add("市");
adapter_C = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_C);
spinner_C.setAdapter(adapter_C);
//spinner_C.setEnabled(false);
spinner_C.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {//这个参数‘i’是选择项的索引
//每当选择一个新的就会触发这个事件,默认会选择第一个,利用这个从这里设置
if (adapter_C.getItem(i).equals("市")){//如果市下拉框选择了市,市是默认显示的
/*这两句是重置区的下拉列表*/
list_Q.clear();//清除区的列表
list_Q.add("区县");//添加一个区县,
adapter_Q = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_Q);//创建
spinner_Q.setAdapter(adapter_Q);//绑定
}else{
/*这三句是重置区的下拉列表*/
list_Q.clear();
list_Q.add("区县");
//添加符合要求的项目。自定义的一个方法,从区里找符合市里的地名,然后添加到list
mapTool_getList(q_Hashmap,list_Q,mapTool_getKey(c_Hashmap,adapter_C.getItem(i)),4);
adapter_Q = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_Q);
spinner_Q.setAdapter(adapter_Q);
}
//程前启后,就完成了下拉列表的联动,最后只用判别区县框里面选择的内容是否是“区县”,就可辨别,具体情况具体考虑
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
/***
* 初始化区县下拉框
*/
list_Q.add("区县");
adapter_Q = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_Q);
spinner_Q.setAdapter(adapter_Q);
//spinner_Q.setEnabled(false);
spinner_Q.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
/***
* 初始化监测类型下拉框
*/
list_TP.add("类型");
list_TP.add("雨量计");
list_TP.add("泥位计");
list_TP.add("地声传感器");
list_TP.add("撞线传感器");
adapter_TP = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_TP);
spinner_TP.setAdapter(adapter_TP);
//spinner_TP.setEnabled(false);
spinner_TP.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
//按钮点击事件
btn_eq_ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("test","run:btn_eq_ok查询点击:"+spinner_Q.getSelectedItem());
//判别区县框里面选择的内容是否是“区县”,就可辨别
if (spinner_Q.getSelectedItem().equals("区县")){
Toast.makeText(getActivity(),"请完善省/市/区县",Toast.LENGTH_SHORT).show();
}else {
//弹框提示
Toast.makeText(getActivity(),mapTool_getKey(q_Hashmap,spinner_Q.getSelectedItem().toString()),Toast.LENGTH_SHORT).show();
}
}
});
}
说在最后
这里我也没用自定义样式,这个可以通过重写adapter来实现,具体参考下面链接。简书:Android 好用的下拉控件Spinner
CSDN:修改Android中Spinner的显示及下拉样式的四种方法
这里我就是使用了list来控制列表的更新和联动,有的不懂得可以留言。本人也比较挫,写不来隐藏的提示项,就干脆将就用吧,功能完成就行。
代码还不懂的可以看下下面教程链接:C语言中文网:Android Spinner:下拉列表控件

最后骚一句,祝大家情人节快乐
——2020.2.14
(你现在的表情一定很好笑,哈哈哈)
要是帮到你了,记得点个赞哦亲!
Android Spinner 下拉框简单应用 详细注解的更多相关文章
- 一分钟掌握Android spinner下拉框
Android 自带的spinner下拉框控件是一个不错的系统控件.主要有两种实现方式: 1.静态的spinner 在res\values中加入一个city资源数组文件 2 <resources ...
- android实现下拉框(spinner),自己定义大小颜色背景位置,去掉默认样式黑边
1. 实现最简单的spinner xml文件,有一个TextView,一个Spinner: <RelativeLayout xmlns:android="http://schemas. ...
- Android自定义spinner下拉框实现的实现
一:前言 本人参考博客:http://blog.csdn.net/jdsjlzx/article/details/41316417 最近在弄一个下拉框,发现Android自带的很难实现我的功能,于是去 ...
- Android 自定义spinner下拉框实现
一:前言本人参考博客:http://blog.csdn.net/jdsjlzx/article/details/41316417 最近在弄一个下拉框,发现Android自带的很难实现我的功能,于是去网 ...
- Android 自定义spinner下拉框实现的实现
请支持原创:http://blog.csdn.NET/geniuseoe2012/article/details/8723702 说到Android下拉框spineer,框架中虽有现成的控件,但实际效 ...
- android 开发-spinner下拉框控件的实现
Android提供实现下拉框功能的非常实用的控件Spinner. spinner控件需要向xml资源文件中添加spinner标签,如下: <Spinner android:id="@+ ...
- Android中自定义xml文件给Spinner下拉框赋值并获取下拉选中的值
场景 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 将布局改 ...
- Android UI自定义Spinner下拉框(用popuwindow实现)-转
定义出第一个图片的布局和弹出框(一个listView)的布局,,这里就不在多说了~ListView需要自己定义一个MyspinnerAdapter~做好这些准备之后,就是弹出框的实现了~ prote ...
- spinner 下拉框控件
spinnerMode=dropdown时,为下拉模式spinnerMode=dialog时,会在界面中间弹出Android:popupBackground=”#f0000000”,可以去除spinn ...
随机推荐
- MySQL保存 emoji 表情(微信昵称表情)
问题分析 在微信开发过程中,总是会遇到带有emoji表情昵称的微信用户无法自动登录的问题. 后台代码抛出类似下面的异常信息. java.sql.SQLException: Incorrect stri ...
- Tarjan算法伪代码
伪代码: 栈:当前dfs路径上的点low[x]:x能到达的点中最小的dfn dfs(x,t) 将x入栈 dfn[x]=t low[x]=t for(x,y) i ...
- 「BZOJ4173」数学
题面 已知 \[\large{S(n,m)=\{k_{1},k_{2},\cdots k_{i}\}}\] 且每个 \(k\) 满足 \[\large{n \%k+m\%k\geq k}\] 求 \[ ...
- 递推 dp
工大要建新教学楼了,一座很高很高的楼,它有n层.学校为了减少排电梯的队伍,建造了好多好多电梯,共有m个.为了让电梯有序,学校给每个电梯设定了独特的可停楼层,如 x1 x2 y1 y2 表示,x1楼层到 ...
- sql server 新建用户 18456
麻辣各级,今天阴沟里翻船 了,自己在家创建sqlserver新的用户名,一直报错 18456 邮件添加用户名这一套下来是没错. 重要是这样===>要重新启动一下sql server,就ok了. ...
- Java 几道常见String面试题
String s1="abc"; String s2="abc"; System.out.println(s1==s2); System.out.println ...
- net 转 java
一,初衷 从事net 工作已经将近4年,net 很好,C#本身也是个优雅的语言,vs 编辑器功能也异常强大,光拖动断点这个功能java idea就无法实现.但是分布式,架构师的net 在国内岗位上比较 ...
- spark和strom优劣分析
对于Storm来说:1.建议在那种需要纯实时,不能忍受1秒以上延迟的场景下使用,比如实时金融系统,要求纯实时进行金融交易和分析2.此外,如果对于实时计算的功能中,要求可靠的事务机制和可靠性机制,即数据 ...
- 基于七牛云对象存储,搭建一个自己专属的极简Web图床应用(手摸手的注释讲解核心部分的实现原理)
一个极简的Web图床应用,支持复制粘贴与拖拽上传图片 1.开发缘由 日常使用Vs Code编写markdown笔记与博客文章时,在文章中插入图片时发现非常不便 使用本地文件编写相对路径---没法直接复 ...
- [bzoj2152] [洛谷P2634] 聪聪可可
Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问题,一般情况下石头剪刀布就好 ...
