Android中Spinner的使用及其详细总结(可实现下拉列表)

Spinner:可以理解为一个数据集合的菜单。

Spinner如果不设置模式,默认采用下拉列表的模式即

android:spinnerMode="dropdown"


也可自己设置为dialog模式显示

android:spinnerMode="dialog"


定义数组资源的方法:

1.数组资源定义在values/arrays.xml中(一般用于资源为固定的,只能通过升级软件来改变数组资源)。通过xml中给Spinner添加android:entries属性绑定;或者通过在java代码中getResources().getStringArray()来获取(通过R.array.+资源数组名):

<resources>
    <string name="app_name">Spinner</string>
    <string-array name="province">
        <item>安徽省</item>
        <item>河北省</item>
        <item>河南省</item>
        <item>湖北省</item>
        <item>湖南省</item>
    </string-array>
</resources>


<Spinner
    android:entries="@array/province"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/spinner"
    android:layout_centerInParent="true"
    android:layout_marginTop="64dp"/>


//获取资源文件,通过array资源获取name为province的数组

String[] stringArray = getResources().getStringArray(R.array.province);


2.在java代码中添加数组资源,直接采用赋值的形式,然后用到时引用就行(一般用于数据经常变动时,可以通过网络请求数据)。

private String[] province = {"安徽省","河北省","河南省","湖北省","湖南省"};


Spinner实现方法:
方法一(最简单的,使用默认的适配器):
1.先拖进去一个Spinner控件
2.在strings资源文件中,添加一个string-array数组,但是,这个数组要给name标签。
3.在Spinner控件中添加entries属性,使用@array/name的方式,加载定义好的数组,或者获取string—array的数组资源

方法二(最常用的,自己定义适配器):
1.先拖进去一个Spinner控件
2.获取数组资源(同上)
3.自定义适配器
4.设置适配器到Spinner控件上


Spinner实现之方法一:

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private Spinner spinner;

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

    private void initView() {
        spinner = (Spinner) findViewById(R.id.spinner);

//        //获取资源文件,通过array资源获取name为province的数组
//        String[] stringArray = getResources().getStringArray(R.array.province);
//        spinner = (Spinner) findViewById(R.id.spinner2);
//        //新建一个数组适配器ArrayAdapter设置三个参数:上下文,下拉列表的样式,数据源
//        ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, stringArray);
//        //将适配器设置给Spinner
//        spinner.setAdapter(adapter);
   
        //设置item的被选择的监听
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            //当item被选择后调用此方法
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            //获取我们所选中的内容
            String s = parent.getItemAtPosition(position).toString();
            //弹一个吐司提示我们所选中的内容
            Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
            }
            //只有当patent中的资源没有时,调用此方法
            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }
}


activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.zhiyuan3g.spinner.MainActivity">

<!--注意entries属性,是添加资源,这样java代码中就不需要进行添加资源的操作。
当然,你也可以在java代码中做添加资源的操作-->
    <Spinner
        android:entries="@array/province"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/spinner"
        android:layout_centerInParent="true"
        />
</RelativeLayout>


strings.xml

<resources>
    <string name="app_name">Spinner</string>
    <string-array name="province">
        <item>安徽省</item>
        <item>河北省</item>
        <item>河南省</item>
        <item>湖北省</item>
        <item>湖南省</item>
    </string-array>
</resources>



效果图:

 

Spinner实现之方法二:

MainActivity.java
package com.zhiyuan3g.spinner;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Spinner;
import android.widget.Toast;

import com.zhiyuan3g.spinner.adapter.MyAdapter;

public class MainActivity extends AppCompatActivity {

    private Spinner spinner;
    //定义了两个数组,一个存放图片,一个存放省份
    private int[] image = {R.drawable.anhui, R.drawable.hebei,
            R.drawable.henan, R.drawable.hubei, R.drawable.hunan};
    private String[] province = {"安徽省","河北省","河南省","湖北省","湖南省"};

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

    private void initView() {
        //控件初始化
        spinner = (Spinner) findViewById(R.id.spinner);
        //自定义适配器,将其设置给spinner
        spinner.setAdapter(new MyAdapter(image,province,this));
        //设置监听
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            //当item被选择后调用此方法
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                //获取我们所选中的内容
                String s = province[position];
                //弹一个吐司提示我们所选中的内容
                Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
            }
            //只有当patent中的资源没有时,调用此方法
            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }
}

MyAdapter.java
package com.zhiyuan3g.spinner.adapter;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.zhiyuan3g.spinner.R;

public class MyAdapter extends BaseAdapter {
    private int[] image;
    private String[] province;
    private Context context;
    private ViewHolder mViewHolder;

    /**
     * function:通过构造方法传递数据
     * @param image:图片数据
     * @param province:省份数据
     * @param context:上下文
     */
    public MyAdapter(int[] image, String[] province, Context context) {
        this.image = image;
        this.province = province;
        this.context = context;
    }

    //item的总长度
    @Override
    public int getCount() {
        return image.length;
    }

    //获取item的标识
    @Override
    public Object getItem(int position) {
        return position;
    }

    //获取item的id
    @Override
    public long getItemId(int position) {
        return position;
    }

    //获取item视图
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //判断是否有可复用的view对象,没有的话走if,有的话走else
        if (convertView==null){
            //找到我们自定义的行布局
            convertView = View.inflate(context, R.layout.layout_item, null);
            //实例化ViewHolder内部类
            mViewHolder = new ViewHolder();
            //给ViewHolder里的控件初始化,通过我们自定义的行布局
            mViewHolder.picture = (ImageView) convertView.findViewById(R.id.picture_img);
            mViewHolder.province = (TextView) convertView.findViewById(R.id.province_tv);
            //给convertView设置一个标签
            convertView.setTag(mViewHolder);
        }else {
            //获取我们设置过的标签,实现复用convertView
            mViewHolder = (ViewHolder) convertView.getTag();
        }
        //分别给每个控件设置相应的内容
        mViewHolder.province.setText(province[position]);
        mViewHolder.picture.setImageResource(image[position]);
        //返回convertView对象
        return convertView;
    }
    //新建ViewHolder内部类,用来定义我们行布局中所用到的控件
    class ViewHolder{
        private ImageView picture;
        private TextView province;
    }
}

layout_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
<ImageView
    android:layout_width="wrap_content"
    android:id="@+id/picture_img"
    android:layout_height="wrap_content"/>
<TextView
    android:layout_width="wrap_content"
    android:id="@+id/province_tv"
    android:layout_marginTop="10dp"
    android:layout_height="wrap_content"/>
</LinearLayout>

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.zhiyuan3g.spinner.MainActivity">

<!--注意entries属性,是添加资源,这里我们不用,而是在代码中添加-->
    <Spinner
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/spinner"
        android:layout_centerInParent="true"
        />
</RelativeLayout>



效果图:

 

 


  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在Android使用Spinner下拉列表,您可以按照以下步骤创建一个新的应用程序: 1. 打开Android Studio,并创建一个新的空白项目。 2. 在res/layout目录创建一个新的XML文件,例如“activity_main.xml”。 3. 在XML布局文件添加Spinner控件。例如: ``` <Spinner android:id="@+id/my_spinner" android:layout_width="match_parent" android:layout_height="wrap_content" /> ``` 这将创建一个默认的Spinner控件。 4. 在MainActivity.java文件,添加以下代码: ``` public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener { Spinner mySpinner; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mySpinner = findViewById(R.id.my_spinner); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.my_array, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); mySpinner.setAdapter(adapter); mySpinner.setOnItemSelectedListener(this); } @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { String item = parent.getItemAtPosition(position).toString(); Toast.makeText(parent.getContext(), "Selected: " + item, Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView<?> parent) { // Do nothing } } ``` 这将创建一个适配器,将适配器绑定到Spinner控件上,并设置选择监听器以处理选择事件。 5. 在res/values目录创建一个新的XML文件,例如“strings.xml”。 6. 在strings.xml文件添加以下代码: ``` <string-array name="my_array"> <item>Item 1</item> <item>Item 2</item> <item>Item 3</item> </string-array> ``` 这将创建一个字符串数组,用于填充Spinner控件。 7. 运行应用程序并测试Spinner控件。 这样,您就可以在Android使用Spinner下拉列表

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值