文章目录

  • 先用起来
  • 方法和属性
  • 样式
    • 增加分割线
    • 选中和下拉样式
    • 弹出框样式
  • 使用自定义的BaseAdapter

先用起来

效果图

布局页面 activity_test

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:padding="20dp"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:id="@+id/tv_tip"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:text="配送方式" /><Spinnerandroid:id="@+id/spinner"android:layout_width="200dp"android:layout_height="40dp"android:layout_marginLeft="10dp"android:layout_toRightOf="@+id/tv_tip"android:background="#E5E5E5"android:dropDownVerticalOffset="45dp"android:spinnerMode="dropdown" /><ImageViewandroid:layout_width="10dp"android:layout_height="10dp"android:src="@mipmap/ic_triangle_down"android:layout_alignRight="@+id/spinner"android:layout_marginRight="10dp"android:layout_centerVertical="true"/></RelativeLayout>
</LinearLayout>

代码

public class TestActivity extends AppCompatActivity {private String[] starArray = {"圆通", "申通", "邮政"};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_test);initSpinner();}private void initSpinner() {//声明一个下拉列表的数组适配器ArrayAdapter<String> starAdapter = new ArrayAdapter<String>(this, R.layout.item_select, starArray);//设置数组适配器的布局样式starAdapter.setDropDownViewResource(R.layout.item_dropdown);//从布局文件中获取名叫sp_dialog的下拉框Spinner sp = findViewById(R.id.spinner);//设置下拉框的标题,不设置就没有难看的标题了sp.setPrompt("请选择配送方式");//设置下拉框的数组适配器sp.setAdapter(starAdapter);//设置下拉框默认的显示第一项sp.setSelection(0);//给下拉框设置选择监听器,一旦用户选中某一项,就触发监听器的onItemSelected方法sp.setOnItemSelectedListener(new MySelectedListener());}class MySelectedListener implements AdapterView.OnItemSelectedListener {@Overridepublic void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {Toast.makeText(TestActivity.this, "您选择的是:" + starArray[i], Toast.LENGTH_SHORT).show();}@Overridepublic void onNothingSelected(AdapterView<?> adapterView) {}}
}

未选中布局 item_drapdown

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="40dp"android:textColor="@android:color/black"android:textSize="14sp"android:gravity="center"/>

选中布局 item_select

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="40dp"android:background="#E5E5E5"android:textSize="14sp"android:gravity="center"/>

方法和属性

setPrompt:设置标题文字。拉列表的展示方式有两种,一种是在当前下拉框的正下方展示列表,此时把spinnerMode属性设置为dropdown;另一种是在页面中部以对话框形式展示列表,此时把SpinnerMode属性设置为dialog,这个setPrompt方法就是在对话框时设置标题
setAdapter:设置下拉列表的适配器。
setSelection:设置当前选中哪项。注意该方法要在setAdapter方法之后调用。
setOnItemSelectedListener:设置下拉列表的选择监听器,该监听器要实现接口OnItemSelectedListener。android:dropDownVerticalOffset:spinnerMode=”dropdown”时,下拉的项目选择窗口在垂直方向相对于Spinner窗口的偏移量
android:dropDownHorizontalOffset:spinnerMode=”dropdown”时,下拉的项目选择窗口在水平方向相对于Spinner窗口的偏移量
android:dropDownSelector:用于设定spinnerMode=”dropdown”时列表选择器的显示效果
android:dropDownWidth:在spinnerMode=”dropdown”时,设定下拉框的宽度
android:gravity:这个属性用于设置当前选择的项目的对齐方式
android:popupBackground:在spinner=”dropdown”时,使用这个属性来设置下拉列表的背景

如果spinner中内容是固定的,那么使用android:entries="@array/shipping_type"表示Spinner的数据集合是从资源数组 shipping_type 中获取的,shipping_type 数组资源定义在values/arrays.xml 中:

<Spinnerandroid:id="@+id/spinner"android:layout_width="200dp"android:layout_height="40dp"android:layout_marginLeft="10dp"android:layout_toRightOf="@+id/tv_tip"android:background="#E5E5E5"android:dropDownVerticalOffset="0dp"android:spinnerMode="dropdown"android:entries="@arrays/shipping_type"/>

其中 shipping_type

<?xml version="1.0" encoding="utf-8"?>
<resources><string-array name="shipping_type"><item>圆通</item><item>申通</item><item>邮政</item></string-array>
</resources>

样式

增加分割线

该分割线只有是dropdown样式时才会显示

style 中增加分隔线的样式

<style name="XSpinnerStyle" parent="android:Widget.ListView.DropDown"><!-- 分隔线颜色 --><item name="android:divider">#E5E5E5</item><item name="android:dividerHeight">1dp</item></style>

然后在现在 Activity 目前使用的样式中使用

<item name="android:dropDownListViewStyle">@style/XSpinnerStyle</item>

选中和下拉样式

ArrayAdapter<String> starAdapter = new ArrayAdapter<String>(this, R.layout.item_select, starArray);
starAdapter.setDropDownViewResource(R.layout.item_dropdown);

其中 R.layout.item_selectR.layout.item_dropdown是选中和下拉的样式。这是我们自己写的样式。当然也可以用默认的样式。android.R.layout.simple_spinner_item :未展开菜单时Spinner的默认样式android.R.layout.simple_spinner_dropdown_item:展开的时候下拉菜单的样式

如果不设置 starAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)出现的结果就是 下拉样式和 为展开时的样式一样

弹出框样式

在第一个栗子中,把SpinnerMode属性设置为dialog

使用自定义的BaseAdapter

效果图:

布局和之前的相同 activity_test

TestActivity

public class TestActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_test);// 初始化控件Spinner spinner  = findViewById(R.id.spinner);// 建立数据源List<ShippingType> shippingTypes =new ArrayList<ShippingType>();shippingTypes.add(new ShippingType("圆通", R.mipmap.yt));shippingTypes.add(new ShippingType("申通", R.mipmap.st));shippingTypes.add(new ShippingType("邮政", R.mipmap.yz));//  建立Adapter绑定数据源MyAdapter _MyAdapter=new MyAdapter(this, shippingTypes);//绑定Adapterspinner.setAdapter(_MyAdapter);}
}

ShippingType

public class ShippingType {private String shippingName;private int shippingIcon;public ShippingType(String shippingName, int shippingIcon) {this.shippingName = shippingName;this.shippingIcon = shippingIcon;}public String getShippingName() {return shippingName;}public void setShippingName(String shippingName) {this.shippingName = shippingName;}public int getShippingIcon() {return shippingIcon;}public void setShippingIcon(int shippingIcon) {this.shippingIcon = shippingIcon;}
}

item_custom

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="5dp"android:gravity="center"><ImageViewandroid:id="@+id/img_icon"android:layout_width="35dp"android:layout_height="35dp"android:src="@mipmap/yt"android:layout_marginRight="10dp"/><TextViewandroid:id="@+id/tv_name"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
</LinearLayout>

参考:
android Spinner控件详解
Android中Spinner用法

Android 中 Spinner下拉框使用相关推荐

  1. Android自定义spinner下拉框实现的实现

    一:前言 本人参考博客:http://blog.csdn.net/jdsjlzx/article/details/41316417 最近在弄一个下拉框,发现Android自带的很难实现我的功能,于是去 ...

  2. android spinner下拉框

    下拉框其实自己很少用到,不过昨天因为写界面时,自己用到了,当时忘记怎么写,所以在网上找了一下资料,做了一个自定义的下拉框.这里,自己把所做的记录一下,以免自己以后还需要到网上查找. 1.用androi ...

  3. android加载时二级联动点击二级联动,Android实现联动下拉框二级地市联动下拉框功能...

    日常使用软件中,为了方便且规范输入,会使用到下拉框进行输入,如注册时生日选项,购物时的地址输入,都会用到下拉框,今日笔者为了巩固已学的知识,实现了二级联动下拉框用作回顾及分享给求知的新手. 思路/步骤 ...

  4. Acitivity(页面)之间的跳转,ProgressBar 进度条,PopupWindow 弹出框,Dialog 对话框,Spinner下拉框

    Acitivity(页面)之间的跳转 Acitivity(页面)之间的跳转需要使用到 Intent(意图) Intent intent = new Intent(MainActivity.this(从 ...

  5. Android第三方开源下拉框:NiceSpinner

     Android第三方开源下拉框:NiceSpinner Android原生的下拉框Spinner基本上可以满足Android开发对于下拉选项的设计需求,但现在越来越流行的下拉框不满足于Andro ...

  6. Android实现联动下拉框

    Android实现联动下拉框,二级地市联动下拉框 日常使用软件中,为了方便且规范输入,会使用到下拉框进行输入,如注册时生日选项,购物时的地址输入,都会用到下拉框,今日笔者为了巩固已学的知识,实现了二级 ...

  7. SpreadJS表格中关于下拉框new GC.Spread.Sheets.CellTypes.ComboBox()的设置和使用

    SpreadJS表格中关于下拉框的设置和使用 Spreadjs使我们经常用到的一种表格插件,下面是自己使用中的一点心得,希望对大家有帮助,废话不所说,下面进入正题: 1.npm下载 @grapecit ...

  8. layui 数据表格下拉框_LayUi数据表格中嵌套下拉框

    layui嵌套下拉框实用方法(附效果图) 在做项目时遇到一个问题,在layui 的数据表格table里面如何做一个下拉框呢?效果图如下: 这样的效果想必是最理想的了 思路分析: 我们可以通过layui ...

  9. layui弹出层中添加下拉框

    layui弹出层中添加下拉框 实习不到两个月,踩到的坑 使用layui写了一个项目,负责其中的一小块,其中有一个页面需要在弹出层中写一个下拉框 代码如下: <div class="la ...

最新文章

  1. 信鸽 ios tag推送 php,iOS 关于信鸽推送点击推送通知的处理
  2. python 获取公网 外网 ip 几种方式
  3. 比特币是什么,看这篇就懂了
  4. java- 和 || 优先级的问题
  5. apt-get remove 与 apt-get purge 区别(删除包、卸载包)
  6. python分句_Python循环中的分句,继续和其他子句
  7. U8恢复记账操作步骤
  8. 批量修改后缀名的方法
  9. 尘埃4 for Mac(DiRT4赛车竞速游戏)原生版
  10. Fabric共识机制
  11. 什么是盒子模型,盒子模型,标准盒模型,怪异盒模型,两种盒模型的区别,box-sizing属性
  12. Thinkpad笔记本键盘拆卸
  13. tui-editor富文本编辑器组件
  14. Windows注册服务的两种方式,并设置服务开机自启
  15. 微积分中,区间再现公式的证明
  16. Spring 揭秘之Spring AOP一世(2)织入实现
  17. linux安装vim plug,VIM 插件管理工具 vim-plug 简明教程
  18. AVPlayer简单使用
  19. 2021年质量员-市政方向-通用基础(质量员)考试资料及质量员-市政方向-通用基础(质量员)模拟考试
  20. 通达信 设置 年线和季度线 分割线

热门文章

  1. java se运算符优先级,【JAVA SE基础篇】10.运算符优先级与类型转换
  2. python怎么快速打括号_中括号怎么打-【python每日一练】有效括号
  3. 微信小程序(uni-app)url参数传递对象
  4. 踩坑之 —— ireport导出空白(java)
  5. 算法分析与设计:分支限界法
  6. vue后台管理上传图片并实现图片裁剪
  7. python批量将excel转成pdf_使用Python转换PDF,Word/Excel/PPT/md/HTML都能转!
  8. elementui 表格中单元格自定义功能
  9. 知名新能源充电桩企业采购我司标签视觉识别系统
  10. 你还戴着有色眼镜看戴尔科技集团吗?