android Spinner控件详解

Android Spinner控件是一种常用的下拉框控件,可以让用户从指定的一组选项中选择一个。它是继承自AbsSpinner类的视图容器,提供了下拉列表的功能。在本篇文章中,我们将详细介绍Spinner控件的使用方法,以及相关示例。

1. Spinner控件属性

Spinner控件具有以下常用属性:

- android:id:控件ID

- android:layout_width:控件宽度

- android:layout_height:控件高度

- android:entries:将一组值显示在选择列表中

- android:prompt:设置弹出对话框的标题文本

- android:background:设置背景色

2. Spinner控件使用方法

2.1 布局文件中定义Spinner控件

在布局文件中定义一个Spinner控件,需要使用 标签,并为其指定相应的属性。在这里我们演示一个简单的布局,在布局中定义一个Spinner控件,设置其颜色为蓝色,并为其提供一个ID。

```xml

android:id="@+id/my_spinner"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="#3F51B5"

android:entries="@array/planets_array" />

```

2.2 为Spinner注册事件监听器

在创建Spinner控件后,需要注册一个选择监听器来响应用户的选择行为。注册监听器的方法有两种:

① 直接实现OnItemSelectedListener接口;

② 匿名内部类实现OnItemSelectedListener接口。

这里我们演示第二种方法。

```java

Spinner mySpinner = findViewById(R.id.my_spinner);

mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

@Override

public void onItemSelected(AdapterView adapterView, View view, int i, long l) {

String item = adapterView.getSelectedItem().toString();

Toast.makeText(getApplicationContext(), "您选择了:" + item, Toast.LENGTH_SHORT).show();

}

@Override

public void onNothingSelected(AdapterView adapterView) {}

});

```

2.3 设置Spinner数据源

为了让Spinner显示数据,需要设置Spinner的数据源。Spinner的数据源通常是一个数组或列表。我们演示一个简单的String数组作为数据源。首先,我们需要在strings.xml文件中定义一个String数组:

```xml

水星

金星

地球

火星

木星

土星

天王星

海王星

```

接着,在Activity中使用ArrayAdapter适配器来设置数据源,并将适配器添加到Spinner控件中。

```java

ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.planets_array));

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //为适配器设置自定义的独立菜单布局

mySpinner.setAdapter(adapter);

```

3. Spinner控件实例

为了更好的理解Spinner控件的使用,下面演示几个实例来详细说明:

3.1 实例1:自定义菜单布局

在上面的例子中,我们使用了默认的独立菜单布局,而实际上我们可以自定义Spinner独立菜单的布局。在xml文件中创建自定义菜单布局,如下:

```xml

android:layout_width="match_parent"

android:layout_height="50dp"

android:orientation="horizontal">

android:id="@+id/icon"

android:layout_width="match_parent"

android:layout_height="30dp"

android:layout_marginLeft="10dp"

android:layout_marginRight="10dp"/>

android:id="@+id/text"

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:textSize="18sp"

android:gravity="center_vertical" />

```

在Activity中设置Spinner的适配器并为适配器设置自定义菜单布局,代码如下:

```java

ArrayAdapter adapter = new ArrayAdapter<>(this, R.layout.spinner_item, getResources().getStringArray(R.array.planets_array));

adapter.setDropDownViewResource(R.layout.spinner_drop_down_item);

mySpinner.setAdapter(adapter);

```

3.2 实例2:给Spinner加入省市二级联动功能

```java

//首先,我们需要定义一个Spinner控件和两个数组来存储省份和对应的城市

private Spinner spProvince;

private String[] provinces = new String[]{"江苏省", "湖南省", "河南省", "广东省"};

private String[][] cities = new String[][]{

{"南京市", "苏州市", "常州市", "南通市", "扬州市"},

{"长沙市", "衡阳市", "岳阳市", "邵阳市", "郴州市"},

{"郑州市", "洛阳市", "开封市", "安阳市", "新乡市"},

{"广州市", "深圳市", "珠海市", "汕头市", "佛山市"}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//然后,将数据源设置给Spinner

spProvince = (Spinner)findViewById(R.id.sp_province);

ArrayAdapter array_adapter = new ArrayAdapter(MainActivity.this,R.layout.support_simple_spinner_dropdown_item,provinces);

spProvince.setAdapter(array_adapter);

spProvince.setOnItemSelectedListener(new ProvinceSelectedListener());

}

//接下来实现SelectionListener

class ProvinceSelectedListener implements AdapterView.OnItemSelectedListener{

@Override

public void onItemSelected(AdapterView parent, View view, int position, long id) {

ArrayAdapter cityArray = new ArrayAdapter(MainActivity.this,R.layout.support_simple_spinner_dropdown_item,cities[position]);

Spinner spCity = (Spinner)findViewById(R.id.sp_city);

spCity.setAdapter(cityArray);

}

@Override

public void onNothingSelected(AdapterView parent) {

}

}

```

3.3 实例3:利用一个简单的列表来作为Spinner的数据源

```java

private Spinner mSpinner;

private String[] mItems = {"Item1", "Item2", "Item3", "Item4", "Item5", "Item6", "Item7"};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mSpinner = (Spinner)findViewById(R.id.spinner);

ArrayAdapter adapter = new ArrayAdapter(this, R.layout.spinner_item, mItems);

adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);

mSpinner.setAdapter(adapter);

mSpinner.setOnItemSelectedListener(new SpinnerSelectedListener());

}

class SpinnerSelectedListener implements AdapterView.OnItemSelectedListener{

@Override

public void onItemSelected(AdapterView parent, View view, int position, long id) {

Toast.makeText(MainActivity.this, "您选择了:" + mItems[position], Toast.LENGTH_SHORT).show();

}

@Override

public void onNothingSelected(AdapterView parent) {

}

}

```

4. 小结

通过本文讲解,相信大家已经掌握了Spinner控件的用法,掌握了在布局文件和代码中使用Spinner控件的方法,并通过示例了解了使用Spinner控件的场景。Spinner控件可谓是Android应用开发中最常用的控件之一,希望读者在以后的Android项目中也能够运用Spinner控件。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(98) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部