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

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>

源码下载


http://www.kler.cn/a/582350.html

相关文章:

  • JavaScript性能优化实战:从瓶颈分析到高效编码策略
  • std::ranges::views::reverse, std::ranges::reverse_view
  • 【具身相关】legged_gym, isaacgym、rsl_rl关系梳理
  • 大语言模型中的归一化技术:LayerNorm与RMSNorm的深入研究
  • 在 IntelliJ IDEA 中配置 Git
  • Android控件Selector封装优化指南:高效实现动态UI效果
  • 在Keil 5中如何建立一个STM32项目
  • transformer模型介绍——大语言模型 LLMBook 学习(二)
  • 代码解读1
  • Java并发编程面试题:基础(11题)
  • 【论文阅读】多模态——CLIPasso
  • JAVA实现好看的俄罗斯方块小游戏(附源码)
  • DICOM开发者常用DICOM开源库详解
  • 【音视频】H265-NALU-AVpacket-PS-RTP(GB28181)
  • 【Godot4.3】Geometry2D总结
  • Kubernetes 中的 Secrets 配置管理
  • Django部署Filemanagement
  • 共享经济时代下,鲲鹏共享科技如何逆袭改命?
  • 操作系统知识总结(三)——内存
  • 【数据结构】3顺序表