目录
一、介绍:
安卓的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:
在上面的代码中,我们创建了一个具有id“my_spinner”的Spinner控件,并设置了其宽度和高度。接下来,我们需要将适配器与此控件绑定。以下是将ArrayAdapter与Spinner绑定的示例代码:
绑定数据:
String[] items = {"Item 1", "Item 2", "Item 3"};ArrayAdapter 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:
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 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:
在res/value 中创建array.xml
- 计算机21-2
- 新能源20-1
- 电子19-1
来源地址:https://blog.csdn.net/A125679880/article/details/129976654