在下拉列表Spinner中添加自定义文字和图标的方法。

Android Spinner自定义全攻略:从UI美化到性能优化(附ViewHolder缓存技巧) 本文深入探讨了Android Spinner控件的深度定制与性能优化。从UI美化、样式分离、自定义Adapter,到性能优化的核心——ViewHolder缓存技巧,提供了一套完整的实战解决方案,帮助开发者打造既美观又流畅的下拉选择体验。 阅读详情

有关于在下拉列表Spinner中添加自定义文字和图标的方法,这里以人的姓名和头像,地址为例,当然只要作出修改就可以把适配器应用于ListView 显示。

 

首先创建一个储存人信息的Person类。

public class Person {

    private String personName, personAddress;
    private Integer drawable;

    public Person(String personName,String personAddress,Integer drawable){
        super();
        this.personName = personName;
        this.personAddress = personAddress;
        this.drawable = drawable;
    }
    public String getPersonName(){
        return personName;
    }

    public void setPersonName(String personName){
        this.personName = personName;
    }

    public String getPersonAddress(){
        return personAddress;
    }

    public void setPersonAddress(String personAddress){
        this.personAddress = personAddress;
    }

    public Integer getDrawable() {
        return drawable;
    }

    public void setDrawable(Integer drawable) {
        this.drawable = drawable;
    }
}


然后创建一个MyAdapter类作为适配器继承自BaseAdapter,重写必须的四个方法

public class MyAdapter extends BaseAdapter{

    private List<Person> mList = null;
    private Context mContext = null;

    public MyAdapter(Context pContext,List<Person> pList){
        this.mContext = pContext;
        this.mList = pList;
    }
    @Override
    public int getCount() {
        return mList.size();
    }

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        //利用getView方法给我们提供的convertView,也可以自己新建一个Layout
        if (convertView == null) {
            LayoutInflater mLayoutInflater = LayoutInflater.from(mContext);     //布局加载权限
            convertView = mLayoutInflater.inflate(R.layout.item_custom, null);
        }

        ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView1);
        imageView.setImageResource(mList.get(position).getDrawable());

        TextView mTextView1 = (TextView) convertView.findViewById(R.id.textView1);
        TextView mTextView2 = (TextView) convertView.findViewById(R.id.textView2);

        mTextView1.setText(mList.get(position).getPersonName());
        mTextView2.setText(mList.get(position).getPersonAddress());

        return convertView;
    }
}



还有自定义的布局文件

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

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:src="@drawable/ic_0"
            android:scrollbarStyle="insideInset"
            android:id="@+id/imageView1" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Large Text"
            android:id="@+id/textView1" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Large Text"
            android:layout_marginLeft="10dp"
            android:id="@+id/textView2"
            android:layout_gravity="center_horizontal" />
    </LinearLayout>
</LinearLayout>


最后是Activity类的内容,这里建立两个Spinner作为对比,一个是简单使用系统的ArrayAdapter,另一个则是我们自定义的adapter


public class MainActivity extends ActionBarActivity {

    private Spinner spinner1 = null;
    private Spinner spinner2 = null;


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

        spinner1 = (Spinner) findViewById(R.id.spinner1);
        String[] mItems = getResources().getStringArray(R.array.language);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>
                (this,android.R.layout.simple_spinner_item,mItems);      //绑定字符串数组
        spinner1.setAdapter(adapter);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner1.setSelection(0, true);    //默认选中第一个
        spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String[] language = getResources().getStringArray(R.array.language);
                Toast.makeText(MainActivity.this, "你点击的是:" + language[position], Toast.LENGTH_SHORT).show();
            }

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

            }
        });

        spinner2 = (Spinner) findViewById(R.id.spinner2);
        final List<Person> persons = new ArrayList<Person>();  //建立数据源
        persons.add(new Person("张三","北京",R.drawable.beijing));         //添加数据
        persons.add(new Person("李四", "上海",R.drawable.shanghai));
        persons.add(new Person("王五", "广州",R.drawable.guangzhou));
        persons.add(new Person("赵六", "深圳",R.drawable.shenzhen));
        MyAdapter myAdapter = new MyAdapter(this,persons);     //实例化适配器

        spinner2.setAdapter(myAdapter);    //下拉列表绑定适配器
        spinner2.setSelection(0,true);    //默认选中第一个,避免打开程序就立即执行onItemSelected方法

        //设置点击列表项目监听事件
        spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                Toast.makeText(MainActivity.this, "你点击的是:" +
                        persons.get(position).getPersonName(), Toast.LENGTH_SHORT).show();
            }

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





一起Talk Android吧(第四百八十三回:如何修改Spinner的倒三角) 本章回中主要介绍了如何修改spinner右侧的倒三角,详细介绍了修改方法和思路,并且通过文字结合代码的方式进行了讲解。 阅读详情

相关推荐

Android Spinner控件使用指南:从基础到进阶

在Android应用中,Spinner是一个常用的控件,它以较小的空间展示一个可下拉的选择菜单。用户可以从中选择一个选项,而这个选择通常会触发一些后续的操作或显示新的数据。Spinner的使用可以提高用户界面的效率和美观性。在Android开发中,Spinner控件常用于提供用户选择列表。正确的选择和定义Spinner的数据源是实现流畅用户界面的关键步骤。我们将从简单数据源的定义开始,逐步深入到复杂数据源的定义。简单数据源通常指的是单一维度的数据集合,例如字符串数组或者列表。

weixin_29859471的博客 1679

Android Studio Spinner自定义背景及右边下拉的图标

相信大家随便查找都能得到类似的代码,但是如何建立在自己的项目上却没那么容易,所以本次文章要说的关键是对于资源文件@drawable/spinner_more文件的由来,以及细节问题。三、项目中定义Spinner,直接使用 android:background="@drawable/spinner_border"注意:Padding基本跟图片缩放差不多,调整到适合自己控件大小的位置,请自行测试;Name就是你在.xml文件中引用的名字,可自行修改;二、在自己的android项目中实现。

Xinmer的博客 3649

android spinner的前面设置图标

android spinner的前面设置图标android spinner的前面设置图标android spinner的前面设置图标android spinner的前面设置图标android spinner的前面设置图标

卜若的代码笔记-android系列-插件:带图片的Spinner插件

1.该插件是我自己封装了一下,提高用户体验,具体解释请转以下: https://blog.youkuaiyun.com/Zaajuan1150/article/details/81704865 2.插件封装: package com.draw.depp.deeplearningdrawer.Plugins.ImageSpinnerPlugins; import android.content.Context; import android.view.View; import android.widget.Adapter

qq_37080133的博客 271

yolov10+bytetrack实现多目标跟踪

在训练yolov10权重的时候一定要注意将类别信息改成自己的信息。把类比什么的改成自己的数据集,数据集的路径也要替换自己的路径。就可以训练自己的数据集了,训练完之后得到自己的权重文件。自己创建一个.yaml文件用于自己数据集的路径选择。工具标注自己的数据集,一定要分清楚自己的类别信息。使用以下代码可以按照比例划分自己的数据集。之后打开命令框输入以下命令进入标注页面。只需要输入好自己数据集的路径就可以开始。将代码里面的nc改成自己的真实类别。修改完之后,运行train.py。然后标注自己的数据集就行。

l15717690526的博客 1525

国内合规开通ChatGPT Plus实操指南:银行卡绑卡与支付全解析

ChatGPT Plus 是 OpenAI 官方推出的高级订阅服务,基于 GPT-4o 多模态大模型提供语音交互、图像理解与长上下文处理能力。其核心使用前提在于完成合规的国际支付绑定,而非网络接入方式。技术原理上,OpenAI 采用 Stripe 支付网关进行风控校验,重点匹配银行跨境权限、卡片类型(仅支持 Visa/Mastercard/Amex 信用卡)、BIN 号段及地理位置一致性。该机制决定了95%的绑卡失败源于银行端配置缺失或卡片不兼容,而非网络问题。实际应用中,PayPal 作为中间支付层可显著

chuannaoxuan4674的博客 1973

Spinner 自定义下拉图标

1.自定义下拉列表形状在 res/drawable 下新建一个xml,如 shape_spinner_drop_down.xml,其内容如下:&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;layer-list xmlns:android="http://schemas.android.com/apk/res/android" &gt; &...

阿刚 6832

2026款拯救者Y9000P深度学习环境配置指南

这套环境适配 2026 款拯救者 Y9000P 的 RTX5060,可直接用于 CV(图像分类、检测)、NLP 等 PyTorch 深度学习任务,GPU 利用率正常,无兼容性问题。后续复现环境时,直接按本文步骤操作即可~

大糊涂虫 2638

spinner显示图标和文字

MainActivity.java package com.example.third; import android.os.Bundle; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.snackbar.Snackbar; import androidx.appcompat.app.AppCompatActivity.

dxm809的博客 971

ESP-01S使用micropython,利用Thonny烧写固件

在家舒服的太久了,想学习点新的东西,这次看上了ESP8266系列的联网设备,想自己做点小玩意出来耍耍,下面跟我一起来学习吧。本篇主要记录固件的烧写及测试。Thonny下载链接不算难,但是网上资源较少。也是提醒自己不要忘记这个步骤,记录一下,也分享给和我一样开始接触的小伙伴,加油加油,万事开头难。

weixin_43422072的博客 1693

鸿蒙手机卸载内置应用 adb连接

**傻瓜式删除鸿蒙系统内置应用,自己亲测有效。**

JJDXBT的博客 3万+

Material-Spinner下拉列表控件

下拉列表控件: https://github.com/jaredrummler/Material-Spinner 介绍: 一个Material的Spinner。 运行效果: 使用说明: 把spinner添加进layout xml:     android:id="@+id/spinner"    android:layout_wid

犀利的小眼神的博客 4640

从零搭建一个AF架构项目:基于TIA Portal V19和S7-PLCSIM的仿真调试全流程

本文详细介绍了如何在TIA Portal V19环境中从零搭建西门子Automation Framework(AF架构)项目,包括环境准备、硬件组态、核心组件创建、项目架构分层实现以及仿真调试全流程。通过模块化编程和标准化接口设计,AF架构显著提升工业自动化项目的开发效率和维护便利性,特别适合S7-1500系列PLC的应用开发。

weixin_29313547的博客 674

android 更改spinner默认样式

更改spinner默认样式

linda的专栏 2万+

【WRF运行报错】总结WRF运行时报错及解决方案(持续更新)

总结WRF运行时报错及解决方案(持续更新)

WW、forever的博客 1632

00 — Intel xe SVM 内核实现精读系列专栏导读

本文系统介绍了Intel Xe GPU的共享虚拟内存(SVM)实现机制。第一部分通过概念地图阐述SVM的六个核心概念及其关系;第二部分通过三个测试用例解析SVM关键功能:fault生命周期验证、madvise与VRAM迁移、跨GPU一致性;第三部分深入内核实现,包括初始化/销毁流程、Page Fault处理、MMU Notifier失效路径、异步垃圾回收、VRAM迁移机制、madvise实现原理,以及与ROCm SVM的对比。文章建议按功能模块顺序学习,从基本概念到测试用例,再深入内核实现细节,最后对比不同

图形/计算GPU的驱动与虚拟化技术分享园地 1671

Spinner下拉列表控件

一、Spinner控件用于显示一个下拉列表,该控件在装载数据的时候需要创建一个Adapter适配器对象。并在创建Adapter对象过程中指定要装载的数据是数组或者是List对象的数据 二、下面是spinner实例: 在main.xml文件中: 1 <LinearLayout xmlns:android="http://...

weixin_30344131的博客 81

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

删除 android 下拉菜单图标,Android Spinner:删除文本和下拉图标之间的额外空白区域...

我和Spinner玩后自己做了.这是一个非常好的解决方案.首先使用您选择的指标图像创建一个下拉列表.android:shape="rectangle"/>android:width="24dp"android:height="24dp"android:gravity="right|center_vertical">android:src="@drawable/ic_dropdown"a...

weixin_42611177的博客 308

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

7、android 高级控件(1)(下拉列表)

下拉框的用法以及适配器的基本概念,结合对下拉框Spinner的使用说明分别阐述数组适配器ArrayAdapter、简单适配器SimpleAdapter的具体用法与展示效果。

weixin_62190821的博客 8535

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Android 单选按钮 下拉列表框

单选按钮: 1.特点: 单选按钮一组是互斥的, 使用RadioGroup实现互斥 2.RadioGroup继承LinnerLayout: 所以可以使用linearLayout的相关属性, 例如: orientation,,,, RadioGroup默认方向是垂直。LinearLayout默认水平方向的。 3.对于单选按钮的事件监听, 通常加载到RadioGroup, 接口:RadioGro...

qq_45844648的博客 2639

Android自定义点击下拉列表

以前看到点击下拉刷新的以为是Spinner控件呢,去发现他们俩有很多不一样(下面图中所示),就自定义了一个View,大体实现了这个效果。 效果图: 其实实现的思路还是比较清晰的,就是点击一下就会显示一个下拉的列表,或是两个列表,我这是点击那个箭头就会显示下面的一个试图,不过是啥视图,只要包含到一个GroupView里面就可以,实现起来就是先把下面的试图给隐藏,然后点击就显示出来而且上面的箭头在改

LiuShuaiQ的博客 4100

Android 自定义Spinner和其下拉窗口

 http://www.cnblogs.com/coding-way/p/3549865.html       现效果: 自定义Spinner其实包括两个部分: 第一部分是用来打开下拉列表的按钮,如图,这个绿色背景直接设置Spinner的背景就行,素材文件如下: 里面的文字需要注意下,Spinner控件没有直接修改文字的接口,这个文字实际上是在Adapter中设置,例如: ...

weixin_34119545的博客 143

Android项目——Spinner的使用

Android中经常会用到下拉列表的使用,Spinner是一个很不错的工具。 (1)在界面上新建3个spinner <LinearLayout android:layout_width="fill_parent" android:layout_height="50dp" android:background="#FFFFFF">

Aldeo 1048

Spinner————下拉菜单

第一步 在layout文件夹下新建main.xml,在main.xml里面编辑TextView和Spinner的属性; 第二步 在MainActivity.java中 修改成 setContentView(R.layout.main),即是刚才自己定义的main.xml public class MainActivity extends Activity {          priv

cnlyn的博客 342

Nice Spinner 属性详解:从基础配置到高级自定义

Nice Spinner 是 Android 开发中一个优雅的下拉选择器组件,它重新实现了默认的 Android Spinner,提供了漂亮的箭头动画和不同的内容显示方式。这个遵循 Material Design 设计指南的组件从 API 14 开始兼容,让你的应用界面更加现代化和用户友好。😊 ## ✨ 基础属性配置 ### 文本颜色设置 通过 `textTint` 属性可以轻松设置 Nic

gitblog_01127的博客 349
下一篇: 自定义天气显示小组件Widget
CCC_122
博客等级 码龄11年 15粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值