您现在的位置是:首页 > 数码 > 

Android 中 Spinner下拉框使用

2025-07-22 09:46:58
Android 中 Spinner下拉框使用 文章目录 先用起来方法和属性样式增加分割线选中和下拉样式弹出框样式 使用自定义的BaseAdapter 先用起来 效果图 布局页面 activity_test <?xml version=1.0 encoding=utf-8?> <LinearLayou

Android 中 Spinner下拉框使用

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

先用起来

效果图

布局页面 activity_test

<?xml version=1.0 encoding=utf-8?>
<LinearLayout xmlns:android=android:layout_width=match_parentandroid:layout_height=match_parentandroid:padding=20dp><RelativeLayoutandroid:layout_width=match_parentandroid:layout_height=wrap_content><TextViewandroid:id=@id/tv_tipandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:layout_centerVertical=trueandroid:text=配送方式 /><Spinnerandroid:id=@id/spinnerandroid:layout_width=200dpandroid:layout_height=40dpandroid:layout_marginLeft=10dpandroid:layout_toRightOf=@id/tv_tipandroid:background=#E5E5E5android:dropDownVerticalOffset=45dpandroid:spinnerMode=dropdown /><ImageViewandroid:layout_width=10dpandroid:layout_height=10dpandroid:src=@mipmap/ic_triangle_downandroid:layout_alignRight=@id/spinnerandroid:layout_marginRight=10dpandroid:layout_centerVertical=true/></RelativeLayout>
</LinearLayout>

代码

public class TestActivity extends AppCompatActivity {private String[] starArray = {圆通, 申通, 邮政};@Overrideprotected void onCreate(Bundle savedInstanceState) {(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) {(, 您选择的是:  starArray[i], Toast.LEGTH_SHORT).show();}@Overridepublic void onothingSelected(AdapterView<?> adapterView) {}}
}

未选中布局 item_drapdown

<?xml version=1.0 encoding=utf-8?>
<TextView xmlns:android=android:layout_width=match_parentandroid:layout_height=40dpandroid:textColor=@android:color/blackandroid:textSize=14spandroid:gravity=center/>

选中布局 item_select

<?xml version=1.0 encoding=utf-8?>
<TextView xmlns:android=android:layout_width=match_parentandroid:layout_height=40dpandroid:background=#E5E5E5android:textSize=14spandroid: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/spinnerandroid:layout_width=200dpandroid:layout_height=40dpandroid:layout_marginLeft=10dpandroid:layout_toRightOf=@id/tv_tipandroid:background=#E5E5E5android:dropDownVerticalOffset=0dpandroid:spinnerMode=dropdownandroid: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) {(savedInstanceState);setContentView(R.layout.activity_test);// 初始化控件Spinner spinner  = findViewById(R.id.spinner);// 建立数据源List<ShippingType> shippingTypes =new ArrayList<ShippingType>();shippingTypes.add(new ShippingType(圆通, yt));shippingTypes.add(new ShippingType(申通, st));shippingTypes.add(new ShippingType(邮政, yz));//  建立Adapter绑定数据源MyAdapter _MyAdapter=new MyAdapter(this, shippingTypes);//绑定Adapterspinner.setAdapter(_MyAdapter);}
}

ShippingType

public class ShippingType {private String shippingame;private int shippingIcon;public ShippingType(String shippingame, int shippingIcon) {this.shippingame = shippingame;this.shippingIcon = shippingIcon;}public String getShippingame() {return shippingame;}public void setShippingame(String shippingame) {this.shippingame = shippingame;}public int getShippingIcon() {return shippingIcon;}public void setShippingIcon(int shippingIcon) {this.shippingIcon = shippingIcon;}
}

item_custom

<LinearLayout xmlns:android=android:layout_width=match_parentandroid:layout_height=wrap_contentandroid:padding=5dpandroid:gravity=center><ImageViewandroid:id=@id/img_iconandroid:layout_width=5dpandroid:layout_height=5dpandroid:src=@mipmap/ytandroid:layout_marginRight=10dp/><TextViewandroid:id=@id/tv_nameandroid:layout_width=wrap_contentandroid:layout_height=wrap_content/>
</LinearLayout>

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

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/shuma/767866.html

相关标签:无
上传时间: 2023-12-27 15:04:25
留言与评论(共有 16 条评论)
本站网友 assembly文件夹
3分钟前 发表
popupBackground:在spinner=”dropdown”时,使用这个属性来设置下拉列表的背景 如果spinner中内容是固定的,那么使用android
本站网友 网址大全导航
24分钟前 发表
layout_width=5dpandroid
本站网友 明珠广场租房
16分钟前 发表
layout_centerVertical=true/></RelativeLayout> </LinearLayout> 代码 public class TestActivity extends AppCompatActivity {private String[] starArray = {圆通
本站网友 室性早搏
10分钟前 发表
Widget.ListView.DropDown><!-- 分隔线颜 --><item name=android
本站网友 南方报业网
5分钟前 发表
这是我们自己写的样式
本站网友 富力新城
8分钟前 发表
申通
本站网友 落伍
2分钟前 发表
textColor=@android
本站网友 hisi
23分钟前 发表
layout_height=5dpandroid
本站网友 萍乡房产
8分钟前 发表
setSelection:设置当前选中哪项
本站网友 鱼腥草的功效
13分钟前 发表
long l) {(
本站网友 特斯拉融资租赁
3分钟前 发表
layout_width=200dpandroid
本站网友 win2008下载
14分钟前 发表
android
本站网友 如何屏蔽网页
18分钟前 发表
layout_width=10dpandroid
本站网友 广东财经网
25分钟前 发表
divider>#E5E5E5</item><item name=android
本站网友 茶叶的功能
13分钟前 发表
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