在下拉列表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

从零到一:手把手教你用C#开发AGV调度系统(附避坑指南)

本文详细介绍了如何使用C#开发高效的AGV调度系统,涵盖从环境搭建到核心算法实现的完整流程。重点解析了动态路径规划、多机协同等关键技术,并提供了实用的避坑指南和性能优化建议,帮助开发者快速构建工业级车辆控制调度系统。

blockchain9miner的博客 742

储能电站 BMS 与车载动力电池 BMS 核心差异:工况、保护策略、控制逻辑对比

储能电站BMS与车载动力电池BMS虽同名,实为针对不同赛道量身定制的产品。简单地将车载BMS方案套用于储能,或将储能BMS思路用于车载,都可能带来性能、安全或成本上的严重问题。在选择和设计BMS时,必须回归其应用场景的本质需求储能BMS是**“资产管理者”**,精打细算,追求在长达十余年的服役期内稳定、高效地创造收益。车载BMS是**“性能与安全卫士”**,反应敏捷,确保在车辆全生命周期内动力澎湃且万无一失。

小帽子的博客 423

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

WOL唤醒配置(以太网、PHY、MAC)

MAC 就是以太网控制器,属于OSI的数字链路层。phy 属于OSI的物理层(Physical layer),所以叫phy。CPU Mac与phy通信通过MII接口,数据的传输通过MDIO数据线。通过配置phy的相关寄存器实现不同的功能。

qq_58264156的博客 8632

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

CXL协议-第三章 CXL事务层

CXL.io为I/O设备提供了一个非一致的负载/存储接口。图3-1显示了Flex总线分层层次结构中的位置。事务类型、事务分组格式、基于信用的流量控制、虚拟通道管理和事务排序规则遵循PCIe*定义,详情请参考PCIe基础规范的“事务层规范”章节。本章重点介绍了用于CXL.io的著名的PCIe操作模式或特性。

qq_41305217的博客 2769

量化金融笔记1-股票量化基础

股票量化基础 文章目录什么是股票股票的定义及其诞生所解决的问题股票的主体和流通股票的常规分类股票价格收益率什么是股票价格的收益率股票价格收益率计算在python中的实现两种收益率算法的特点及应用场合股票交易规则场内交易与场外交易A股、B股、H股国内多层次的资本市场股票交易指令和撮合机制股票交易时间股票交易成本股票复权股票数据介绍与提取行业分类和指数行情数据因子数据标的数据基本面数据 什么是股票 股票的定义及其诞生所解决的问题 股票的定义:股票是一种有价证券,是股份有限公司公开发行的用以证明投资者的股东身份

折桂狂人的博客 2395

Material-Spinner下拉列表控件

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

犀利的小眼神的博客 4640

单光子雪崩二极管(SPAD):原理、极高增益机制与微光探测解析

本文系统阐述了单光子雪崩二极管(SPAD)的工作原理及其在弱光探测中的应用。SPAD通过工作在盖革模式下的碰撞离化效应实现单光子探测,其核心机理包括:1)采用p+-n-n+结构实现高电场分布;2)通过雪崩倍增过程获得10^6量级增益;3)采用主动/被动淬灭机制实现快速恢复。文章详细分析了SPAD的关键性能参数(如光子探测效率、暗计数率等)及其在量子通信、激光雷达等领域的应用优势,揭示了该器件在极微弱光信号探测中的独特价值。

Fun_LiDAR的博客 1043

android 更改spinner默认样式

更改spinner默认样式

linda的专栏 2万+

SPICE仿真软件:HSPICE_(20).HSPICE仿真结果的后处理

HSPICE仿真结果的后处理是一个多步骤的过程,包括读取结果文件、可视化、分析和导出。通过使用命令行工具、Python脚本和HSPICE内置工具,可以高效、准确地完成这些任务。Python脚本的灵活性和强大的数据分析能力使其成为后处理的理想选择。自动化处理可以显著提高工作效率,减少人为错误,而高级分析方法可以更深入地理解仿真结果,为电路设计提供有力支持。

kkchenjj的博客 1382

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spinner下拉列表控件

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

weixin_30344131的博客 81

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

删除 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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

weixin_62190821的博客 8535

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、付费专栏及课程。

余额充值