开发者社区> 啊啊啊88jdk> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Spinner控件详解

简介: Spinner控件详解 效果图 修改Spinner样式 在介绍之前,先看一下系统原生的样式 6.
+关注继续查看

Spinner控件详解

效果图

P1

修改Spinner样式

在介绍之前,先看一下系统原生的样式

6.x & 5.x系统样式

x6

4.x系统样式

这里写图片描述

官方文档

XML属性 方法 描述
android:dropDownHorizontalOffset setDropDownHorizontalOffset(int) Amount of pixels by which the drop down should be offset horizontally.
android:dropDownSelector List selector to use for spinnerMode=”dropdown” display.
android:dropDownVerticalOffset setDropDownVerticalOffset(int) Amount of pixels by which the drop down should be offset vertically.
android:dropDownWidth setDropDownWidth(int) Width of the dropdown in spinnerMode=”dropdown”.
android:gravity setGravity(int) Gravity setting for positioning the currently selected item.
android:popupBackground setPopupBackgroundResource(int) Background drawable to use for the dropdown in spinnerMode=”dropdown”.
android:prompt The prompt to display when the spinner’s dialog is shown.
android:spinnerMode Display mode for spinner options.

填充数据

Spinner spinner = (Spinner) findViewById(R.id.spinner);
// 建立数据源
String[] mItems = {"Item 1", "Item 2", "Item 3", "Item 4"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, mItems);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

点击监听

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
        // TODO
    }

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

设置下拉框的位置(偏移量)

系统默认效果在上面已经看到了,下拉框的左上方顶点坐标与Spinner控件左上角顶点坐标在同一位置

设置垂直偏移量


  • android:dropDownVerticalOffset
  • setDropDownVerticalOffset(int)

垂直偏移量就是只在原基础上向下或者向上偏移多少像素
例如,有时候我们想要下拉框在Spinner下面显示,类似这样
P1

我们可以这样写(XML)

<Spinner
    android:id="@+id/spinner"
    android:layout_width="wrap_content"
    android:layout_height="40dp"
    android:layout_margin="20dp"
    android:dropDownVerticalOffset="40dp" />

设置水平偏移量

  • android:dropDownHorizontalOffset
  • setDropDownHorizontalOffset(int)

呃……

设置下拉框背景色

  • android:popupBackground
  • setPopupBackgroundResource(int)

和设置控件背景一样,除了色值也可以设置一个Shape,例如这样

android:popupBackground="@drawable/shape_green"

P2

自定义Spinner内文字字体样式

方式一

我们在填充数据的时候,创建了一个ArrayAdapter

ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, mItems);

传进去一个item布局,这个XML就是Spinner字体样式的文件,我们可以自己创建一个XML传进去,例如:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    style="?android:attr/spinnerItemStyle"
    android:singleLine="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="#FF5A5A5A"
    android:ellipsize="marquee"
    android:textAlignment="inherit"/>

方式二

在Spinner的监听里,获取到布局,修改样式,例如这样:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
        // 获取到TextView
        TextView tv = (TextView)view;
        // 修改样式属性
        tv.setTextColor(Color.BLUE);
        tv.setTextSize(15f);
        tv.setGravity(Gravity.CENTER);
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        Toast.makeText(MainActivity.this, "Nothing", Toast.LENGTH_SHORT).show();
    }
});

自定义下三角样式

可以通过设置背景色,将这个三角冲掉

方式一

添加一个带有下三角的背景图

方式二

将背景色设置为透明

<Spinner
    ……
    android:background="@android:color/transparent"
    …… />

然后在Spinner的TextView上画一个我们想要的图案

android:drawableRight="@mipmap/dropmenu_icon_down"

思路就是这样,具体怎么修改,可以参考上面的“自定义Spinner内文字字体样式”,效果如下:

P3

自定义下拉框中Item样式

我们在创建完Adapter以后,设置了一个下拉框里的Item样式,是一个系统样式

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

那么,我们自定义一个自己的样式,就可以啦。例如这样:

<?xml version="1.0" encoding="utf-8"?><!--
/*
**Spinner 下拉Item的样式
*/
-->
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="@dimen/y61"
    android:ellipsize="marquee"
    android:gravity="right|center"
    android:maxEms="30"
    android:paddingRight="@dimen/x28"
    android:singleLine="true"
    android:textColor="#FF262626"
    android:textSize="@dimen/x28" />

效果图

P4

设置下拉框风格

  • android:spinnerMode

dropdown

android:spinnerMode="dropdown"

就是我们上面一直演示的样式。

dialog

android:spinnerMode="dialog"

弹窗的样式,像这样:

P5

设置下拉框宽度

  • android:dropDownWidth

其他

android:dropDownSelector
android:prompt

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ToolBar控件详解
ToolBar控件详解 在Activity中添加ToolBar 1.添加库 dependencies { .
858 0
Android开发之Spinner控件使用
      之前博客中已经介绍了Spinner控件的数据绑定,地址在:http://blog.csdn.net/zdw_wym/article/details/50000357,本篇将介绍Spinner的事件监听器:OnItemSelectedListener 。
732 0
Android开发之RadioGroup与RadioButton控件使用
      RadioButton即单选按钮,它在开发中提供了一种“多选一”的操作模式,是Android开发中常用的一种组件,例如在用户注册时,选择性别时只能从“男”或者“女”中选择一个。
938 0
Android Studio中Spinner控件的数据绑定实现
这里介绍使用集合在程序中为Spinner控件设定数据源,步骤如下: 1、在Android Studio界面中,选择“Project”,然后展开"app"->"res"->"layout",打开activity_main.
1550 0
Android中的基本控件(上)--TextView控件
<p>TextView组件的主要功能是用于显示文本,此类定义。</p> <p>java.lang.Object<br><span style="white-space:pre"></span>  ↳android.view.View<br><span style="white-space:pre"></span><span style="white-space:pre"></span> 
1020 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载