一、介绍:
安卓的spinner是一个下拉菜单控件,通常用于选择一组选项中的一个。它可以为用户提供一种简单的交互方式,使其能够快速轻松地对应用程序中的数据进行选择。
要使用spinner,首先需要在xml布局文件中创建一个spinner元素。这个元素必须包含一个adapter,该adapter负责将数据与spinner控件绑定在一起。在java代码中,我们需要为spinner设置一个监听器,以便在用户选择一个选项时进行响应。
spinner相关属性:
- android:dropdownhorizontaloffset:设置列表框的水平偏移距离
- android:dropdownverticaloffset:设置列表框的水平竖直距离
- android:dropdownselector:列表框被选中时的背景
- android:dropdownwidth:设置下拉列表框的宽度
- android:gravity:设置里面组件的对其方式
- android:popupbackground:设置列表框的背景
- android:prompt:设置对话框模式的列表框的提示信息(标题),只能够引用string.xml 中的资源id,而不能直接写字符串
- android:spinnermode:列表框的模式,有两个可选值: dialog:对话框风格的窗口 dropdown:下拉菜单风格的窗口(默认)
- 可选属性:android:entries:使用数组资源设置下拉列表框的列表项目
二、例子
例子一:(含适配器)
以下是创建spinner控件的示例代码:
xml:
<spinner android:id="@+id/my_spinner" android:layout_width="wrap_content" android:layout_height="wrap_content" />
在上面的代码中,我们创建了一个具有id“my_spinner”的spinner控件,并设置了其宽度和高度。接下来,我们需要将适配器与此控件绑定。以下是将arrayadapter与spinner绑定的示例代码:
绑定数据:
string[] items = {"item 1", "item 2", "item 3"}; arrayadapter<string> adapter = new arrayadapter<(this,android.r.layout.simple_spinner_item,items); adapter.setdropdownviewresource(android.r.layout.simple_spinner_dropdown_item); spinner spinner = findviewbyid(r.id.my_spinner); spinner.setadapter(adapter);
在上面的代码中,我们首先定义一个包含字符串项的数组。接下来,我们创建了一个arrayadapter对象,并设置其资源id和数据项。最后,我们将适配器与具有id“my_spinner”的spinner控件绑定起来。
一旦spinner控件被设置了适配器,我们需要为其设置一个选择监听器。以下是在java代码中设置spinner的选项监听器的示例代码:
spinner.setonitemselectedlistener(new adapterview.onitemselectedlistener() { @override public void onitemselected(adapterview<?> parent, view view, int position, long id) { // 记录当前选择的项 string selecteditem = (string) parent.getitematposition(position); log.d("spinner", "selected item: " + selecteditem); } @override public void onnothingselected(adapterview<?> parent) { // 什么都不做 } });
在上面的代码中,我们创建了一个匿名adapterview.onitemselectedlistener对象,并将其分配给spinner控件。当用户选择一个项时,onitemselected方法将被调用,并且我们可以读取所选的选项。如果用户没有选择任何项,则onnothingselected方法将被调用。
通过使用spinner控件,我们可以轻松地让用户在应用程序中进行选择,并在选择时执行适当的操作。无论是在表单中选择选项还是在应用程序中选择不同的视图,spinner都是一个很有用的工具。
完整代码:
activity_main:
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".mainactivity"> <spinner android:id="@+id/my_spinner" android:layout_width="match_parent" android:layout_height="wrap_content" /> </linearlayout>
mainactivity:
package com.example.spinnerdemo02; import androidx.appcompat.app.appcompatactivity; import android.os.bundle; import android.util.log; import android.view.view; import android.widget.adapterview; import android.widget.arrayadapter; import android.widget.spinner; public class mainactivity extends appcompatactivity { private spinner spinner; // 下拉列表的数据 string[] items; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); // 初始化界面 initview(); // 绑定数据 initdata(); } private void initdata() { items = new string[]{"item 1", "item 2", "item 3"}; arrayadapter<string> adapter = new arrayadapter<>(this, android.r.layout.simple_spinner_item, items); adapter.setdropdownviewresource(android.r.layout.simple_spinner_dropdown_item); spinner.setadapter(adapter); // spinner.setonitemselectedlistener(new adapterview.onitemselectedlistener() { @override public void onitemselected(adapterview<?> parent, view view, int position, long id) { // 记录当前选择的项 string selecteditem = (string) parent.getitematposition(position); log.d("spinner", "selected item: " + selecteditem); } @override public void onnothingselected(adapterview<?> parent) { // 什么都不做 } }); } private void initview() { spinner = findviewbyid(r.id.my_spinner); } }
例子二(不含适配器):
效果图:
完整代码:
mainactivity:
package com.example.spinnerdemo; import androidx.appcompat.app.appcompatactivity; import android.os.bundle; import android.view.view; import android.widget.adapterview; import android.widget.button; import android.widget.checkbox; import android.widget.compoundbutton; import android.widget.edittext; import android.widget.radiogroup; import android.widget.spinner; import android.widget.toast; public class mainactivity extends appcompatactivity implements compoundbutton.oncheckedchangelistener{ edittext name; // 下拉列表 spinner mspinner; // 复选框 checkbox basketball,music,game; // 单选框 radiogroup mradiogroup; button mbutton; // 性别 private string sex = ""; // 爱好 private string hobby = ""; // 班级 private string class; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); initview(); } private void initview() { name = findviewbyid(r.id.name); mspinner = findviewbyid(r.id.spinner); mradiogroup = findviewbyid(r.id.group); mbutton = findviewbyid(r.id.button); basketball = findviewbyid(r.id.basketball); music = findviewbyid(r.id.music); game = findviewbyid(r.id.game); // 使用radiogroup监听radio的变化 mradiogroup.setoncheckedchangelistener(new radiogroup.oncheckedchangelistener() { @override public void oncheckedchanged(radiogroup group, int checkedid) { switch (checkedid){ case r.id.man: sex = "男"; break; case r.id.woman: sex = "女"; break; default: sex = ""; break; } } }); // 注册复选框监听事件 basketball.setoncheckedchangelistener(this); game.setoncheckedchangelistener(this); music.setoncheckedchangelistener(this); // 下拉列表监听事件 mspinner.setonitemselectedlistener(new adapterview.onitemselectedlistener() { // 当item被选中时调用该方法 @override public void onitemselected(adapterview<?> parent, view view, int position, long id) { class = mainactivity.this.getresources().getstringarray(r.array.position)[position]; } // 当item没有被选中时调用 @override public void onnothingselected(adapterview<?> parent) { } }); // 按钮的监听事件 mbutton.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { toast.maketext(mainactivity.this, "姓名:"+name.gettext()+" 班级:"+class+"性别:"+sex+" 爱好:"+hobby, toast.length_short).show(); } }); } // 复选框的监听事件 @override public void oncheckedchanged(compoundbutton buttonview, boolean ischecked) { // 获取按钮的文本 string msg = buttonview.gettext().tostring(); // 判断是否被选中 if(ischecked) { if (!hobby.contains(msg)) { hobby = hobby + msg; } }else{ if (hobby.contains(msg)){ hobby = hobby.replace(msg,""); } } } }
activity_main:
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".mainactivity"> <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="姓名:" android:textsize="20sp" /> <edittext android:id="@+id/name" android:layout_width="80dp" android:layout_height="wrap_content" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="班级:" android:textsize="20sp" /> <spinner android:id="@+id/spinner" android:entries="@array/position" android:layout_width="match_parent" android:layout_height="match_parent"/> </linearlayout> <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <textview android:id="@+id/sex" android:text="性别:" android:textsize="20sp" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <radiogroup android:id="@+id/group" android:layout_width="wrap_content" android:layout_height="wrap_content"> <radiobutton android:id="@+id/man" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="男" android:textsize="20sp"/> <radiobutton android:checked="true" android:id="@+id/woman" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="女" android:textsize="20sp"/> </radiogroup> </linearlayout> <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <textview android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="爱好" android:textsize="20sp" /> <checkbox android:id="@+id/basketball" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="篮球" /> <checkbox android:id="@+id/music" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="音乐"/> <checkbox android:id="@+id/game" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="音乐"/> </linearlayout> <button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="提交"/> </linearlayout>
在res/value 中创建array.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="position"> <item>计算机21-2</item> <item>新能源20-1</item> <item>电子19-1</item> </string-array> </resources>
总结
到此这篇关于android控件spinner(下拉列表)使用的文章就介绍到这了,更多相关spinner下拉列表使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论