3分钟看懂Android Studio下拉框组件

[复制链接]
发表于 2025-6-8 16:45:36 | 显示全部楼层 |阅读模式
什么是下拉框?



 实现步骤:
一、布局文件中添加Spinner组件

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     android:layout_width="match_parent"
  3.     android:layout_height="match_parent"
  4.     android:orientation="vertical"
  5.     android:padding="5dp" >
  6.    
  7.     <Spinner
  8.         android:id="@+id/sp_dropdown"
  9.         android:layout_width="match_parent"
  10.         android:layout_height="wrap_content"
  11.         android:spinnerMode="dialog" />"
  12. </LinearLayout>
复制代码
        这里可选的属性是spinnerMode,当选择dialog(对话框)的时间,下拉框是在页面中部弹出,并且拥有对话框标题“请选择年度最佳网游”,如果设置为dropdown,就是在当前下拉框的正下方弹出列表框。
        可以看到这个组件并没有text属性,那为什么初始化界面(图1)的时间,会默认显示“英雄同盟”呢?
二、代码文件中初始化下拉框并且设置监听器

2.1  运动创建,设置页面内容为上面的下拉框界面,并初始化下拉框的列表框

  1. public class MainActivity3 extends AppCompatActivity {
  2.     @Override
  3.     protected void onCreate(Bundle savedInstanceState) {
  4.         super.onCreate(savedInstanceState);
  5.         setContentView(R.layout.activity_main3);
  6.         initSpinnerForDropdown(); // 初始化下拉模式的列表框
  7.     } //未完
复制代码
2.2  界说要展示在下拉框的文本数组

  1. // 定义下拉列表需要显示的文本数组
  2.     private String[] starArray = {"英雄联盟", "守望先锋", "DOTA2", "CS2", "三角洲", "穿越火线","地下城与勇士"};
复制代码
2.3  界说初始化下拉框方法

       在 Android 开发中,ArrayAdapter 是一个常用的适配器类,用于将一个数组或集合中的数据映射到一个视图(通常是 ListView 或 Spinner)。它是 Android 提供的一个工具类,继承自 BaseAdapter,封装了根本的适配器逻辑,简化了将数据绑定到视图的流程。这里列表项布局文件还没有界说。
  1. private void initSpinnerForDropdown() {
  2.         // 声明一个下拉列表的数组适配器
  3.         ArrayAdapter<String> starAdapter = new ArrayAdapter<String>(this, R.layout.item_select, starArray);
  4.         // 从布局文件中获取名叫sp_dropdown的下拉框
  5.         Spinner sp_dropdown = findViewById(R.id.sp_dropdown);
  6.         // 设置下拉框的标题。对话框模式才显示标题,下拉模式不显示标题
  7.         sp_dropdown.setPrompt("请选择年度最佳网游");
  8.         sp_dropdown.setAdapter(starAdapter); // 设置下拉框的数组适配器
  9.         sp_dropdown.setSelection(0); // 设置下拉框默认显示第一项
  10.         // 给下拉框设置选择监听器,一旦用户选中某一项,就触发监听器的onItemSelected方法
  11.         sp_dropdown.setOnItemSelectedListener(new MySelectedListener());
  12.     }
复制代码
      setPrompt是给下拉框起标题。界说数组适配器、设置下拉框的数组适配器、对选择变乱添加监听器,这就是简单的初始化下拉框的流程。
 sp_dropdown.setSelection(0) 表示默认选中 starArray 中的第一个元素。
2.4 设置监听用户选择变乱的尺度接口

  1. class MySelectedListener implements AdapterView.OnItemSelectedListener {
  2.         // 选择事件的处理方法,其中arg2代表选择项的序号
  3.         public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
  4.             Toast.makeText(MainActivity3.this, "您选择的是" + starArray[arg2],
  5.                     Toast.LENGTH_LONG).show();
  6.         }
  7.         // 未选择时的处理方法,通常无需关注
  8.         public void onNothingSelected(AdapterView<?> arg0) {}
  9.     }
复制代码
完备逻辑

  • 界说了一个 MySelectedListener 类,用于监听 Spinner 的选中变乱。
  • 当用户选择某一项时,onItemSelected 会被调用。
  • 利用 arg2 参数(选中项的索引)从数据源 starArray 获取选中项的内容,并用 Toast 提示用户。Toast 是一个轻量级的消息提示框,用于向用户显示简短的信息。它是非阻塞的,通常在屏幕底部短暂弹出,然后自动消失。
  • 如果用户未选中任何项,onNothingSelected 会被调用,但这里没有处理逻辑。
三、界说列表项布局文件

列表项布局文件 是用来界说 列表中每个单独项的界面样式和内容排版 的 XML 文件。
  1. <TextView xmlns:android="http://schemas.android.com/apk/res/android"
  2.     android:id="@+id/tv_name"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="50dp"
  5.     android:singleLine="true"
  6.     android:gravity="center"
  7.     android:textSize="17sp"
  8.     android:textColor="#0000ff" />
复制代码
四、效果展示

当选择三角洲之后,会在页面底部进行消息提示,一连时间Toast.LENGTH_LONG=3.5秒


五、添加图标

数组适配器只能显示文本,如果盼望列表选项既有文本,又有图标,就需要用简单适配器。
5.1 准备图片资源


5.2  更改运动界面代码

  1. private int[] iconArray = {R.drawable.lol, R.drawable.overwatch, R.drawable.dota2,
  2.             R.drawable.cs2, R.drawable.sanjiaozhou};
  3.     // 定义下拉列表需要显示的文本数组
  4.     private String[] starArray = {"英雄联盟", "守望先锋", "DOTA2", "CS2", "三角洲"};
  5.     // 初始化下拉模式的列表框
  6.     private void initSpinnerForSimpleAdapter() {
  7.         // 声明一个映射对象的列表,用于保存图标与名称配对信息
  8.         List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
  9.         for (int i = 0; i < iconArray.length; i++) {
  10.             Map<String, Object> item = new HashMap<String, Object>();
  11.             item.put("icon", iconArray[i]);
  12.             item.put("name", starArray[i]);
  13.             list.add(item); // 把行星图标与名称的配对映射添加到列表
  14.         }
  15.         // 声明一个下拉列表的简单适配器,其中指定了图标与文本两组数据
  16.         SimpleAdapter starAdapter = new SimpleAdapter(
  17.                 this, list, R.layout.item_simple, new String[]{"icon", "name"},
  18.                 new int[]{R.id.iv_icon, R.id.tv_name}
  19.         );
  20.         // 设置简单适配器的布局样式
  21.         starAdapter.setDropDownViewResource(R.layout.item_simple);
复制代码
5.3 重新制作列表布局文件
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     android:layout_width="match_parent"
  3.     android:layout_height="wrap_content"
  4.     android:orientation="horizontal">
  5.     <!-- 这是展示图标的ImageView -->
  6.     <ImageView
  7.         android:id="@+id/iv_icon"
  8.         android:layout_width="0dp"
  9.         android:layout_height="50dp"
  10.         android:layout_weight="1" />
  11.     <!-- 这是展示名称的TextView -->
  12.     <TextView
  13.         android:id="@+id/tv_name"
  14.         android:layout_width="0dp"
  15.         android:layout_height="match_parent"
  16.         android:layout_weight="3"
  17.         android:gravity="center"
  18.         android:textColor="#ff0000"
  19.         android:textSize="17sp" />
  20. </LinearLayout>
复制代码
六、下拉框效果展示



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5

GMT+8, 2025-6-27 21:05 , Processed in 0.098721 second(s), 30 queries 手机版|qidao123.com技术社区-IT企服评测▪应用市场 ( 浙ICP备20004199 )|网站地图

快速回复 返回顶部 返回列表