当前位置: 首页 > news >正文

Android Spinner总结

文章目录

  • Android Spinner总结
    • 概述
    • 简单使用
    • 自定义布局
    • 自定义Adapter
    • 添加分割线
    • 源码下载

Android Spinner总结

概述

在 Android 中,Spinner 是一个下拉选择框。

在这里插入图片描述

简单使用

在这里插入图片描述

xml布局:

<Spinner
    android:id="@+id/spinner1"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_margin="10dp" />

代码:

private val items = arrayOf("选项1", "选项2", "选项3", "选项4")
val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, items)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner1.adapter = adapter
spinner1.onItemSelectedListener =
    object : android.widget.AdapterView.OnItemSelectedListener {
        override fun onItemSelected(
            parent: android.widget.AdapterView<*>?,
            view: android.view.View?,
            position: Int,
            id: Long
        ) {
            showToast(items[position])
        }

        override fun onNothingSelected(parent: android.widget.AdapterView<*>?) {
            showToast("未选择")
        }
    }

自定义布局

在这里插入图片描述

xml布局:

xml<Spinner
    android:id="@+id/spinner2"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:background="@drawable/spinner_bg" />

spinner_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_margin="100dp"
    android:drawableRight="@drawable/ic_like"
    android:drawablePadding="5dp"
    android:padding="10dp"
    android:id="@+id/textView"
    android:textColor="#6d6d6d"
    android:textSize="15sp"
    tools:text="一年级" />

spinner_bg.xml:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/white" />
            <stroke
                android:width="1dp"
                android:color="#ff999999" />
            <corners android:radius="4dp" />
        </shape>
    </item>
    <item
        android:gravity="right|center_vertical"
        android:right="8dp">
        <bitmap android:src="@drawable/icon_arrow_down" />
    </item>
</layer-list>

代码:

private val items = arrayOf("选项1", "选项2", "选项3", "选项4")
val adapter = ArrayAdapter(this, R.layout.spinner_layout, items)
spinner2.adapter = adapter
spinner2.setPopupBackgroundResource(R.drawable.pop)
spinner2.post {
    spinner2.dropDownVerticalOffset = spinner2.measuredHeight
}

自定义Adapter

在这里插入图片描述

xml布局:

<Spinner
    android:id="@+id/spinner3"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:background="@drawable/spinner_bg" />

spinner_layout2.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_margin="100dp"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:textColor="#6d6d6d"
        android:textSize="15sp"
        tools:text="一年级" />
</LinearLayout>

代码:

class MySpinnerAdapter(private val context: Context, private val list: Array<String>) :
    BaseAdapter() {
    override fun getCount() = list.size

    override fun getItem(position: Int): Any? {
        return null
    }

    override fun getItemId(position: Int): Long {
        return 0
    }

    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
        val itemView = LayoutInflater.from(context).inflate(R.layout.spinner_layout2, null)
        val textView = itemView.findViewById<TextView>(R.id.textView)
        textView.text = list[position]
        return itemView
    }
}
spinner3.adapter = MySpinnerAdapter(this, items)
spinner3.setPopupBackgroundResource(R.drawable.pop)
spinner3.post {
    spinner3.dropDownVerticalOffset = spinner3.measuredHeight
}

添加分割线

定义样式:

<style name="SpinnerStyle" parent="android:Widget.ListView.DropDown">
    <item name="android:divider">#333</item>
    <item name="android:dividerHeight">1dp</item>
</style>

设置主题:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <item name="android:dropDownListViewStyle">@style/SpinnerStyle</item>
</style>

源码下载

相关文章:

  • 23、vue3+vite配置环境变量实现开发、测试、生产的区分
  • LLM最新的模型微调技术有哪些
  • c语言闯算法--常用技巧
  • LINUX 指令大全
  • 养生,点亮健康生活
  • 监听新打开窗口的关闭情况和iframe内系统的url改变情况
  • 如何用“几何产品规范”让齿轮测量更精准?
  • 如何选择适合您智能家居解决方案的通信协议?
  • Spring Boot 项目部署启动异常问题分析与解决​:主类缺失与依赖冲突的分析
  • Java 集合框架:数据管理的强大工具
  • vue知识点(4)
  • STM32F407 定时器
  • 第九课:异步爬虫进阶:aiohttp与多线程的技术博客
  • 【Java 和 Scala】-- Java 与 Scala 的 Assert 断言对比
  • AI Agent系列(四) -Agent架构认知
  • 【ODHead】BEVDet的 CenterHead的推理和拓展到蒸馏损失的算法细节
  • java后端开发day31--集合进阶(一)-----Collection集合List集合数据结构1
  • Hive SQL 精进系列:字符串拼接的三种常用方式
  • 【WRF-Chem】预处理工具(Preprocessors)总结
  • es-索引详解
  • 视频丨雄姿英发!中国仪仗队步入莫斯科红场
  • 马上评|让“贾宝玉是长子长孙”争议回归理性讨论
  • 比尔·盖茨:未来20年通过盖茨基金会捐出几乎全部财富,2045年底基金会停止运营
  • 上海“随申兑”服务平台有哪些功能?已归集800余个惠企政策
  • 保利发展前4个月销售额约876亿元,单月斥资128亿元获4个项目
  • 太空摄影的发展