一. Spinner的XML属性

属性 对应方法 描述
android:entries 使用数组资源设置该下拉列表框的列表项目。
android:
dropDownHorizontalOffset
setDropDownHorizontalOffset(int) 设置下拉列表框的水平偏移量。
android:
dropDownVerticalOffset
setDropDownVerticalOffset(int) 设置下拉列表框的垂直偏移量。
android:
dropDownWidth
setDropWidth(int) 设置下拉列表的宽度。
android:
popupBackground
设置下拉列表框的背景色。
android:promt 设置该列表选择框的提示信息。

二. 使用arrays.xml填充Spinner

在activity_main.xml中:

<Spinner
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:entries="@array/books" />

在arrays.xml中:

<?xml version="1.0" encoding="utf-8"?>
<reasources>
    <string-array name="books">
        <item>疯狂Android讲义</item>
        <item>Android编程指南</item>
        <item>Android和PHP开发最佳实践</item>
    </string-array>
</resources>

三. 使用ArrayAdapter填充Spinner

使用ArrayAdapter填充Spinner的5个步骤,如下:

第一步:添加数据源:添加一个下拉列表项的list,这里添加的项就是下拉列表的菜单项。

private List<String> booksList = new ArrayList<String>();
booksList.add("疯狂Android讲义");
booksList.add("Android编程指南");
booksList.add("Android和PHP开发最佳实践");

第二步:定义适配器,添加数据源:为下拉列表定义一个数组适配器(ArrayAdapter)。

adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);

第三步:为适配器设置下拉列表的样式:

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

第四步:将适配器添加到下拉列表上。

mySpinner.setAdapter(adapter);

第五步:为下拉列表设置监听器。

// 列表项被选中时
mySpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
    // ...
});

实例:(采用ArrayAdapter填充Spinner)

activity_main.xml中:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/booksText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16dp"
        android:textColor="#f85455" />
    <Spinner
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

MainActivity.java中:

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener{

    private Spinner spinner;
    private TextView booksText;
    private List<String> booksList;
    private ArrayAdapter arrayAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        spinner = (Spinner) findViewById(R.id.spinner);
        booksText = (TextView) findViewById(R.id.booksText);

        // 1. 设置数据源
        booksList = new ArrayList<String>();
        booksList.add("疯狂Android讲义");
        booksList.add("Android编程指南");
        booksList.add("Android和PHP开发最佳实践");

        // 2. 新建ArrayAdapter
        arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, booksList);

        // 3. 设置下拉菜单的样式
        arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        // 4. 为Spinner加载适配器
        spinner.setAdapter(arrayAdapter);

        // 5. 为Spinner设置监听器
        spinner.setOnItemSelectedListener(this);
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

        String bookName = (String) arrayAdapter.getItem(position);
        booksText.setText("您选择的书名是:" + bookName);
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }
}

效果图如下:

此处输入图片的描述

四. 使用SimpleAdapter填充Spinner(图文并茂)

使用SimpleAdapter填充Spinner的步骤,与使用ArrayAdapter填充Spinner的步骤类似。

示例:

列表项的样式item.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="match_parent"
    android:orientation="horizontal">
    <ImageView
        android:id="@+id/item_img"
        android:src="@mipmap/ic_launcher"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="30dp" />
    <TextView
        android:id="@+id/item_title"
        android:layout_width="wrap_content"
        android:layout_height="48dp"
        android:textSize="20dp"
        android:textColor="#333" />
</LinearLayout>

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <Spinner
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

MainActivity.java:

private Spinner spinner;
private TextView booksText;
private SimpleAdapter simpleAdapter;
private List<Map<String, Object>>dataList;
private String[] booksList = {"疯狂Android讲义", "Android编程指南", "Android和PHP开发最佳实践"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

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

    // 1. 设置数据源
    dataList = new ArrayList<Map<String, Object>>();

    // 2. 新建ArrayAdapter
    simpleAdapter = new SimpleAdapter(this, getData(), R.layout.item, new String[] {"pic", "title"}, new int[] {R.id.item_img, R.id.item_title});

    // 3. 为Spinner加载适配器
    spinner.setAdapter(simpleAdapter);

    // 4. 为Spinner设置监听器
    spinner.setOnItemSelectedListener(this);

private List<Map<String, Object>> getData() {
    // 创建数据
    for(int i = 0; i < booksList.length; i++) {
        Map<String, Object>map = new HashMap<String, Object>();
        map.put("pic", R.mipmap.ic_launcher);
        map.put("title", booksList[i]);

        dataList.add(map);
    }
    return dataList;
}

效果图如下:

此处输入图片的描述

本文作者:子匠_Zijor,转载请注明出处:http://www.dengzhr.com/others/mobile/727