Android常用控件Spinner的使用(详解)

这篇具有很好参考价值的文章主要介绍了Android常用控件Spinner的使用(详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Spinner介绍

在Android开发过程中,Spinner下拉控件是比较常用的控件,它可以以下拉框和dialog的方式进行展示。默认是下拉框方式。

Spinner效果

Android常用控件Spinner的使用(详解)
上图可以看出实现Spinner的方式有两种:一、ArrayAdater 数组适配器 二、自定义适配器。

ArrayAdapter所需要的代码

1、布局界面activity_main.xml代码

Android常用控件Spinner的使用(详解)

2、MainActivity.java代码

Android常用控件Spinner的使用(详解)

3、spinner.item_1.xml代码

Android常用控件Spinner的使用(详解)

@BindView()代码解释

首先说明一下@BindView的作用,从字面意思可以看出这个意思是:绑定视图。
他的作用等同于  spinner=findViewById(R.id.main_spinner);,
需要使用的小伙伴可以在app目录下的bulid.grale中添加这二行代码。
		implementation 'com.jakewharton:butterknife:10.0.0'
		annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'`
然后在MainAcitivty.java的Oncreate方法里面添加       ButterKnife.bind(this);

下面是bind的两个参数

 public static Unbinder bind(@NonNull Object target, @NonNull View source) {}
 //Obejct:默认填this
 //source:这里需要加入View,在自定义适配器中有用到
    class ViewHolder {

        @BindView(R.id.spinner_item_2_imageView)
        ImageView imageView2;
        @BindView(R.id.spinner_item_2_name)
        TextView name2;

        public ViewHolder(View view) {
            ButterKnife.bind(this, view);
        }
    }
}

ArrayAdapter代码解析

Android常用控件Spinner的使用(详解)

String:在这里不一定是String,也可以是int ,float,double等等,根据你数据的类型判断这里改填什么
getBaseContext:这里需要传入Context的对象,直接getBaseContext或者getContext都可以。
R.layout.spinner.item_1:这里需要传入一个布局,直接new Layout Resouce File就可以了。
data:数据源

ArrayAdapter数组适配器 也就介绍完了,看起来还是很简单,接下来,我们需要实现图片+文字的方式出现,需要使用到自定义适配器了。

自定义适配器所需要的代码

1、activity.main.xml布局

    <Spinner
        android:id="@+id/main_spinner2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:spinnerMode="dropdown"
        />
        //android:spinnerMode="dropdown"         dialog方式展示

2、spinner.item_2.xml代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/spinner_item_2_imageView"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:layout_weight="1"
        android:src="@drawable/ic_launcher_background" />

    <TextView
        android:id="@+id/spinner_item_2_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:gravity="center"
        android:text="下拉框1"/>
</LinearLayout>
//由于TextView和ImageView在同一个LinearLayout中,我们将布局平分两部分
//在View中分别添加android:layout_weight="1"

3、SpinnerBean.java代码

public class SpinnerBean {
    int ImageView;
    String name;

    public int getImageView() {
        return ImageView;
    }

    public void setImageView(int imageView) {
        ImageView = imageView;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public SpinnerBean(int imageView, String name) {
        ImageView = imageView;
        this.name = name;
    }
}

4、SpinnerAdapter.java

public class SpinnerAdapter extends BaseAdapter {
    Context context;
    List<SpinnerBean> mDatas;

    public SpinnerAdapter(Context context, List<SpinnerBean> mDatas) {
        this.context = context;
        this.mDatas = mDatas;
    }

    @Override
    public int getCount() {
        return mDatas.size();
    }

    @Override
    public Object getItem(int position) {
        return mDatas.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int posiiton, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.spinner_item_2, null);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.imageView2.setImageResource(mDatas.get(posiiton).getImageView());
        holder.name2.setText(mDatas.get(posiiton).getName());
        return convertView;
    }

    class ViewHolder {

        @BindView(R.id.spinner_item_2_imageView)
        ImageView imageView2;
        @BindView(R.id.spinner_item_2_name)
        TextView name2;

        public ViewHolder(View view) {
            ButterKnife.bind(this, view);
        }
    }
}

5、MainActivty.java代码

    List<SpinnerBean> customData;
    private void initSpinner2() {
        customData = new ArrayList<>();
        SpinnerBean spinnerBean = new SpinnerBean(R.drawable.ic_launcher_background, "下拉框1");
        SpinnerBean spinnerBean2 = new SpinnerBean(R.mipmap.ic_launcher_round, "下拉框2");
        SpinnerBean spinnerBean3 = new SpinnerBean(R.drawable.ic_launcher_background, "下拉框3");
        SpinnerBean spinnerBean4 = new SpinnerBean(R.mipmap.ic_launcher_round, "下拉框4");
        SpinnerBean spinnerBean5 = new SpinnerBean(R.drawable.ic_launcher_background, "下拉框5");
        SpinnerBean spinnerBean6 = new SpinnerBean(R.mipmap.ic_launcher_round, "下拉框6");
        SpinnerBean spinnerBean7 = new SpinnerBean(R.drawable.ic_launcher_background, "下拉框7");
        SpinnerBean spinnerBean8 = new SpinnerBean(R.mipmap.ic_launcher_round, "下拉框8");
        SpinnerBean spinnerBean9 = new SpinnerBean(R.drawable.ic_launcher_background, "下拉框9");
        customData.add(spinnerBean);
        customData.add(spinnerBean2);
        customData.add(spinnerBean3);
        customData.add(spinnerBean4);
        customData.add(spinnerBean5);
        customData.add(spinnerBean6);
        customData.add(spinnerBean7);
        customData.add(spinnerBean8);
        customData.add(spinnerBean9);
        SpinnerAdapter spinnerAdapter = new SpinnerAdapter(getBaseContext(), customData);
        spinner2.setAdapter(spinnerAdapter);
    }

自定义适配器代码解析

首先介绍一下为什么需要创建SpinnerBean,java和spinner.item_2.xml。
使用Android已有的适配器只能指定一个数据类型,无法加载由多个(String、int)组成的Bean,
这些就使用到Java中的泛型

List泛型的作用:可以动态的添加索引序列。其中SpinnerBean.java就给我们展示如何定义一个泛型。

    int ImageView;
    String name;
       public SpinnerBean(int imageView, String name) {
        ImageView = imageView;
        this.name = name;
    }
    //按住alt+int键        快速构建get、set和构造方法
    //创建好之后,在MainAcitivty中new List<SpinnerBean>就可以添加数据了

SpinnerAdapter自定义适配器

自定义适配器中有四种方法:getCount(),getItem(),getItemId(),getView()
getCount():获取数据的总条数
getItem():获取索引值所对应的对象
getItemId():获取索引值所对应的对象名称
getView():获取界面

前三个比较容易理解,说一下第四个getView()
Android常用控件Spinner的使用(详解)

position:表示位置
convertView:这里是自定义适配器优化的一个方面,可以对一个View进行缓存,只需要改变数据即可,不用创建getCount()个View。
parent:…文章来源地址https://www.toymoban.com/news/detail-473928.html

convertView内存优化的代码

        ViewHolder holder = null;
        if (convertView == null) {//convertView暂时还没有布局
        //将需要展示的layout赋值给convertView,方便使用
            convertView = LayoutInflater.from(context).inflate(R.layout.spinner_item_2, null);
            //将带有convertView的ViewHolder赋值给holder
            holder = new ViewHolder(convertView);
            //设置View
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

到了这里,关于Android常用控件Spinner的使用(详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android布局和控件:创建用户界面的XML布局文件和常用UI控件详解

    在Android应用开发中,创建用户界面是一个重要的任务。通过使用XML布局文件和常用的UI控件,开发人员可以设计和构建出吸引人且功能丰富的应用界面。本文将详细介绍如何使用XML布局文件来创建Android应用的用户界面,并深入探讨一些常用UI控件的属性和用法。 XML布局文件是

    2024年02月17日
    浏览(43)
  • Android开发——控件EditText, 2.获取EditText输入的数据,通过按钮点击实现,ImageView控件,缩放类型,控件ProgressBar,常用属性详解,进度条设置

    1. android : hint 输入提示 2. android : textColorHint  输入提示文字的颜色 3. android : inputType  输入类型 4. android : drawableXxxx 在输入框的指定方位添加图片 5. android : drawablePadding  设置图片与输入内容的间距 6. android : paddingxxxx  设置内容与边框的间距 7. android : backgrou

    2024年02月07日
    浏览(49)
  • Android 之 Spinner (列表选项框)的基本使用

    本来本节是想给大家介绍一个Gallery(画廊)的一个控件的,后来想想还是算了,因为 在Android 4.1后就已经被弃用了,尽管我们可以通过兼容不来使用Gallery,不过想想 还是算了,因为Gallery在每次切换图片的时候,都需要重新创建视图,这样无疑会造成 很大资源浪费!我们可以通

    2024年02月10日
    浏览(56)
  • 合宙Air724UG LuatOS-Air LVGL API控件-加载器(Spinner)

    加载器(Spinner) 通过  lvgl.spinner_create  就可创建一个加载器,本身自带动画效果。 可以通过  lvgl.spinner_set_arc_length  函数调整加载器的弧长。单位是度,一圈是按 360 度计算的。 通过  lvgl.spinner_set_spin_time  可以设置转速,这里的单位是 ms,是加载器转完一圈的时间,GIF 录制

    2024年02月09日
    浏览(40)
  • Android常用控件

    View类 View 类是所有 Android 控件和容器的父类,常见属性如图所示。  (1)TextView控件 TextView 控件继承自 View 类,用于在界面上显示一段文本信息。除了拥有View类的属性,还发展了些自己的属性,常用的如下图所示。   (2)EditText控件 EditText 控件允许用户在控件里输入和编

    2024年02月11日
    浏览(51)
  • Android学习(五):常用控件

    TextView EditText Button RadioButton ImageView 1、TextView控件 1.1、简介 TextView是用于显示文字(字符串)的控件,可在代码中通过设置属性改变文字的大小、颜色、样式等功能。 1.2、示例 2、EditText控件 2.1、简介 EditText继承自TextView,可以进行编辑操作,将用户信息传递给Android程序。还可

    2024年01月21日
    浏览(37)
  • Android Studio(控件常用属性)

    通用属性 属性 描述 android:id 用于为视图指定唯一的标识符。 android:layout_width 用于指定视图的宽度。 android:layout_height 用于指定视图的高度。 android:layout_margin 用于指定视图周围的空白区域。 android:layout_padding 用于指定视图内部的填充区域。 android:background 用于设置视图的背景

    2024年02月05日
    浏览(44)
  • 无涯教程-Android - Spinner函数

    Spinner允许您从下拉菜单中选择一个项目 例如。使用Gmail应用程序时,将显示如下所示的下拉菜单,您需要从下拉菜单中选择一个项目。 本示例演示计算机的类别,您需要从类别中选择一个类别。 以下是修改后的主要Activity文件src/com.example.spinner/AndroidSpinnerExampleActivity.java的内容。

    2024年02月10日
    浏览(47)
  • 【APP渗透测试】Android APK常用测试工具(Drozer)安装及使用方法介绍

    本篇文章主要介绍 Drozer Android测试工具的安装以及简单使用,后续会持续更新更多使用方法。 Drozer 是 MWR Labs 开发的一款Android安全测试框架。是目前最好的Android安全测试工具之一。其官方文档说道: Drozer允许你一个普通Android应用的身份与其他应用和操作系统交互。 在Web世界

    2024年02月16日
    浏览(48)
  • Android Studio开发之路(八)Spinner样式设置

    白色背景+显示下拉框按钮 问题: 设置Spinner的背景可以通过设置background: android:background=\\\"@color/white\\\" ,但是一旦设置了这个值,右侧的下拉按钮就会消失 在drawable中添加一个spinner_style.xml,并添加以下内容,然后在布局文件中的Spinner中添加Style 这里@drawable/ic_dropdown是一个下拉按

    2024年04月28日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包