Spinner控件的使用(设置下拉列表)

Spinner是下拉列表控件,如同ListView一样,需要适配器把数据转化成能在界面布局中显示的形式,其实大部分相同。有意思的是他会需要多设置一下,哪一部分呢?Spinner总共分成两部分,一部分是已经显示的部分,还有一部分是下拉列表。两种的显示都可以自定义,下面为大家展示一下代码:

第一步:定义带有Spinner控件的布局

<?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">

    <TextView
        android:id="@+id/txtInfo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hello,world!" />

    <Spinner
        android:id="@+id/sp1"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:prompt="四季"/>

</LinearLayout>

第二步:使用系统提供的ArrayList类创建Adapter,然后用Spinner显示。并且检测行点击,当点击时显示点击内容。代码如下:

package cn.edu.qtech.csc.lcb.spinnerdemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity {

    //定义控件变量
    private Spinner sp;
    private TextView info;

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

        sp=(Spinner)findViewById(R.id.sp1);
        info=(TextView)findViewById(R.id.txtInfo);

        //填充底层数据
        List<String> data=new ArrayList<String>();
        data.add("春天");
        data.add("夏天");
        data.add("秋天");
        data.add("冬天");

        //建立Adapter对象
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item,  //使用系统预先定义的布局
//       		R.layout.myitem, //对Spinner文本框使用自定义的布局
            data);

        //设置下拉框的布局
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//        adapter.setDropDownViewResource(R.layout.myitem); //弹出的浮动菜单使用自定义布局

        //设置Spinner的适配器对象
        sp.setAdapter(adapter);

        //设置默认选项
        sp.setSelection(2);

        //添加点击选择的监听器
        //view--点击的行对应的View(TextView)
        //position--点击选择的行号
        sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String s=((TextView)view).getText().toString();
                Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
                info.setText("选中: "+s);
            }

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

    }
}

大家可以看到用//注释掉的两行代码,这两行是分别为当前显示的内容和下拉列表里的内容设置布局。布局代码如下:

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/info"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:singleLine="true"       //这个一定要设置true,不然的话一段内容太长会显示两行,很难看
    android:textColor="#ff0000"
    style="?android:attr/spinnerDropDownItemStyle" />

大家有没有发现一个问题,在我的ListView中,ArrayAdapter中使用自定义布局一共有四个参数,而在这里有三个参数,缺了一个id参数。为什么呢?答案在这里:

如果布局里面只有一个textview,就不要加ID参数,否则,如果布局是线性布局之类的容器,就必须加ID参数。

也就是说,对于我们这个系统默认的限制布局,我们是不需要id参数的。

下面看一下运行结果,分别是全用系统,单个自定义,全部自定义:

                    

源码连接:https://download.csdn.net/download/qq_38367681/10778203

发布了113 篇原创文章 · 获赞 33 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_38367681/article/details/83959101