《Android Studio开发实战》学习(六)- 下拉框

  • 背景
  • 下拉框Spinner的使用
  • 数组适配器ArrayAdapter的使用
  • 简单适配器SimpleAdapter的使用
  • 布局文件的编写
  • 代码文件的编写
  • 运行结果

背景

在这里继续学习Android Studio的使用方法,编写一个下拉列表选择工具 1,学习下拉框Spinner和数组适配器ArrayAdapter、简单适配器SimpleAdapter的使用。现在想要设计一个下拉列表选择工具,包括3个下拉框,内容是水金地火木土六个行星的名字,第一个用下拉方式显示列表,第二个用数组适配器 ArrayAdapter以对话框形式显示列表,第三个用简单适配器SimpleAdapter以对话框形式显示列表,每个列表项目包括一个行星的图片和名字。

下拉框Spinner的使用

Spinner是下拉框,用于从一串列表中选择某项,类似于单选按钮的组合 1。在布局文件layout/activity_main.xml中可以设置spinnerMode属性,以控制下拉列表的展示方式。dropdown表示以下拉框方式展示列表,dialog表示以对话框形式展示列表。布局代码可以这样写

<Spinnerandroid:id="@+id/sp_stars"android:layout_width="match_parent"android:layout_height="match_parent"android:spinnerMode="dropdown"android:entries="@array/stars" />

entries属性用于提前指定列表中的内容,使用时需要提前把表示小行星名称的数组添加到资源文件values/stars.xml

<?xml version="1.0" encoding="utf-8"?>
<resources><string-array name="stars"><item></item>   <item>Mercury</item><item>Venus</item><item>Earth</item><item>Mars</item><item>Jupiter</item><item>Saturn</item></string-array>
</resources>

数组适配器ArrayAdapter的使用

可以在代码文件中使用Spinner.setAdapter()方法为下拉框Spinner添加一个适配器,适配器可以是ArrayAdapter或SimpleAdapter 1。新建一个ArrayAdapter对象时,需要指定它的布局(不是下拉框列表整体的布局,而是单个列表项目的布局),这时候可以新建一个布局文件layout/activity_list.xml,这个文件内只有一个TextView,如下所示

<?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="80dp"android:gravity="center"android:textSize="18sp"android:textColor="#006400">
</TextView>

简单适配器SimpleAdapter的使用

ArrayAdapter只能显示文本,SimpleAdapter能同时展示文本与图片。首先新建一个布局文件layout/activity_simple_list.xml,添加如下代码

<?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="wrap_content"android:orientation="horizontal" ><ImageViewandroid:id="@+id/iv_icon"android:layout_width="50dp"android:layout_height="50dp"android:gravity="center" /><TextViewandroid:id="@+id/tv_name"android:layout_width="match_parent"android:layout_height="50dp"android:gravity="center"android:textSize="18sp"android:textColor="#bdb76b" />
</LinearLayout>

这表示下拉列表中的每个项目是包括1个图像视图和1个文本视图的线性布局。

布局文件的编写

一共需要3个布局文件:

  1. layout/activity_main.xml,垂直方向依次摆放3个下拉框
<?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:orientation="vertical"><Spinnerandroid:id="@+id/sp_stars_1"android:layout_width="match_parent"android:layout_height="100dp"android:spinnerMode="dropdown"android:orientation="vertical"android:entries="@array/stars" /><Spinnerandroid:id="@+id/sp_stars_2"android:layout_width="match_parent"android:layout_height="100dp"android:spinnerMode="dialog" /><Spinnerandroid:id="@+id/sp_stars_3"android:layout_width="match_parent"android:layout_height="100dp"android:spinnerMode="dialog" /><TextViewandroid:id="@+id/tv_bbs"android:layout_width="match_parent"android:layout_height="400dp"android:text="" />
</LinearLayout>
  1. layout/activity_list.xml,数组适配器列表项目布局设置,代码见上
  2. layout/activity_simple_list.xml,简单适配器列表项目布局设置,代码见上

代码文件的编写

6个行星的图片需要事先拷贝到AndroidStudioProjects目录下当前工程的src/main/res/drawable文件夹里。

package com.example.spinner;import androidx.appcompat.app.AppCompatActivity;
import android.widget.*;
import android.os.Bundle;
import java.util.*;
import android.view.View;
import android.view.View.*;
import android.text.method.ScrollingMovementMethod;
public class MainActivity extends AppCompatActivity {private TextView tv_bbs;private Spinner sp_stars_1, sp_stars_2, sp_stars_3;private String[] stars = {"", "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn"};private int[] iconArray = {android.R.color.transparent, R.drawable.mercury, R.drawable.venus, R.drawable.earth, R.drawable.mars, R.drawable.jupiter, R.drawable.saturn};private List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 在下拉框中选择之后,在文本框中显示。tv_bbs = (TextView) findViewById(R.id.tv_bbs);tv_bbs.setMovementMethod(new ScrollingMovementMethod());OnLongClickListener clickL = new ClickLAction();tv_bbs.setOnLongClickListener(clickL);// 第一个下拉框sp_stars_1 = (Spinner) findViewById(R.id.sp_stars_1);sp_stars_1.setOnItemSelectedListener(new ClickIAction());sp_stars_1.setSelection(0);// 第二个下拉框sp_stars_2 = (Spinner) findViewById(R.id.sp_stars_2);ArrayAdapter<String> starAdapter = new ArrayAdapter<String>(this, R.layout.activity_list, stars);sp_stars_2.setPrompt("Please select a star:");sp_stars_2.setAdapter(starAdapter);sp_stars_2.setSelection(0);sp_stars_2.setOnItemSelectedListener(new ClickIAction());// 第三个下拉框sp_stars_3 = (Spinner) findViewById(R.id.sp_stars_3);for(int i=0; i < iconArray.length; i++) {Map<String, Object> item = new HashMap<String, Object>();item.put("icon", iconArray[i]);item.put("name", stars[i]);list.add(item);}SimpleAdapter starSimpleAdapter = new SimpleAdapter(this, list, R.layout.activity_simple_list, new String[] {"icon", "name"}, new int[] {R.id.iv_icon, R.id.tv_name});sp_stars_3.setPrompt("Please select a star:");sp_stars_3.setAdapter(starSimpleAdapter);sp_stars_3.setSelection(0);sp_stars_3.setOnItemSelectedListener(new ClickIAction());}private class ClickIAction implements AdapterView.OnItemSelectedListener {public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {if ( arg2 != 0) {String s = tv_bbs.getText() + "\nYou choose: " + stars[arg2];tv_bbs.setText(s);}}public void onNothingSelected(AdapterView<?> arg0) {}}private class ClickLAction implements OnLongClickListener {@Overridepublic boolean onLongClick(View v) {if (v.getId() == R.id.tv_bbs) {tv_bbs.setText("");}return true;}}
}

运行结果

按之前探索的方法 2生成apk文件,然后传输到手机上运行,结果如下:


  1. 欧阳燊. Android Studio开发实战. 清华大学出版社. 2017. ↩︎ ↩︎ ↩︎

  2. 《Android Studio开发实战》学习(一)- Hello World_下唐人的博客-CSDN博客_android studio学习程序开发 ↩︎

《Android Studio开发实战》学习(六)- 下拉框相关推荐

  1. 《Android Studio开发实战》学习(三)- 展示图片

    <Android Studio开发实战>学习(三)- 展示图片 背景 问题描述 将图片添加到Android Studio资源中 图像视图ImageView的使用 关闭APP中标题的显示 图 ...

  2. 《Android Studio开发实战》学习(五) - 截图

    <Android Studio开发实战>学习(五) - 截图 背景 页面布局 布局文件的编写 代码文件的编写 ImageView控件截图的原理 运行结果 背景 在这里继续学习Android ...

  3. 《Android Studio开发实战》学习(二)- 聊天室

    <Android Studio开发实战>学习(二)- 聊天室 背景 聊天室布局文件的编写 聊天室代码文件的编写 运行结果 背景 在前一篇文章 1中实现了使用Android Studio开发 ...

  4. 《Android Studio开发实战》学习(一)- Hello World

    <Android Studio开发实战>学习(一)- Hello World 背景 Android Studio的安装 Android Studio的启动和运行 运行小应用Hello Wo ...

  5. 《Android Studio开发实战 从零基础到App上线(第2版)》资源下载和内容勘误

    资源下载 下面是<Android Studio开发实战 从零基础到App上线(第2版)>一书用到的工具和代码资源: 1.本书使用的Android Studio版本为3.2,最新的安装包可前 ...

  6. 《Android Studio开发实战 从零基础到App上线》源码运行问题解答

    本书提供了所有章节的完整源码下载,自上市以来陆续收到读者的意见反馈,现将与源码有关的问题汇总归类如下,方便更多的朋友解决源码运行过程中发现的问题: 一.打开本书源码时,出现"Plugin w ...

  7. 《Android Studio开发实战 从零基础到App上线(第3版)》资源下载和内容勘误

    资源下载 下面是<Android Studio开发实战 从零基础到App上线(第3版)>一书用到的工具和代码资源: 1.本书使用的Android Studio版本为Android Stud ...

  8. 《Android Studio开发实战 从零基础到App上线》本书内容问题答疑

    1.关于学习本书之前是否需要Java基础 问题:看安卓开发教程书需要很扎实的java基础吗? 回答:本书的零基础指的是安卓零基础,不是Java零基础,所以看本书之前需要一定的Java基础,基本的变量声 ...

  9. 《Android Studio开发实战 从零基础到App上线(第3版)》出版后记

    2018年11月,经过熬夜写作的<Android Studio开发实战 从零基础到App上线(第2版)>正式出版面世.承蒙众多读者的厚爱,第2版的图书在此后的三年多时间,一直保持在移动开发 ...

最新文章

  1. tensorrt轻松部署高性能dnn推理_NVIDIA Triton推理服务器助力深度学习推理
  2. 按下电源后的几秒钟,CPU 在干嘛?
  3. IBatis.Net学习笔记系列文章
  4. 成功解决 .Quit() File COMObject InternetExplorer.Application, line 2, in Quit pywintypes.com_error
  5. SEO日暮途穷?做好几点实现华丽蜕变
  6. QEMU 网络虚拟化
  7. Effective Java之谨慎地覆盖clone(十一)
  8. 用于基于SWT的应用程序的RichText编辑器组件
  9. 信息图:程序员/开发人员实际在用哪些工具
  10. 04_SSM整合ActiveMQ支持多种类型消息
  11. vue 监听map数组变化_解决vue无法侦听数组及对象属性的变化问题
  12. 我之所以抛弃Java而选择Kotlin的10个理由
  13. 用php写成绩switch,帮我看一下,这个php的switch我写的对不对?
  14. linux文件和目录处理命令
  15. spring 默认情况下事务是惟一的 同一个方法里面第一个sql开启后 在执行完 将事务传递给下一个sql...
  16. 高质量程序好文分享之王垠《编程的智慧》
  17. PHP求100-1000之间的水仙花数
  18. uni-app开发微信公众号H5网页,用微信开发者工具调试公众号
  19. layui合并单元格(此方式适用于没有列冻结的单元格合并)
  20. MFC扩展DLL添加对话框资源时对话框ID是“未声明标识符”

热门文章

  1. 基于php的网络数据包分析工具的设计与开发
  2. 阿里java社招_阿里社招有多难?2020年最新阿里java面经分享
  3. 笔记-备份还原QCN问题答疑,9008救砖刷机包手动制作
  4. POP3协议是什么?底层原理是什么?
  5. python苹果李子橙_Python 炫技操作:安装包的八种方法
  6. 老吕架构-2021年文章精选
  7. GRE背词法:17天搞定 ,杨鹏版[转]
  8. Game of Threads POC【源码分析】
  9. 记一下金山云实习生面试经历
  10. 新人必读:区块链实用型技能树