Spinner控件详解

效果图

修改Spinner样式

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

6.x & 5.x系统样式

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下面显示,类似这样


我们可以这样写(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"

自定义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内文字字体样式”,效果如下:

自定义下拉框中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" />

效果图

设置下拉框风格

  • android:spinnerMode

dropdown

android:spinnerMode="dropdown"

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

dialog

android:spinnerMode="dialog"

弹窗的样式,像这样:

设置下拉框宽度

  • android:dropDownWidth

其他

android:dropDownSelector

android:prompt

Spinner控件详解的更多相关文章

  1. android Spinner控件详解

    Spinner提供了从一个数据集合中快速选择一项值的办法.默认情况下Spinner显示的是当前选择的值,点击Spinner会弹出一个包含所有可选值的dropdown菜单,从该菜单中可以为Spinner ...

  2. IOS—UITextFiled控件详解

    IOS—UITextFiled控件详解 //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGR ...

  3. picker控件详解与使用,(实现省市的二级联动)

    picker控件详解与使用,(实现省市的二级联动) 第一步:新建一个单视图(single view)的工程, 命名为pickerTest,不要勾选下面两个选项,第一个是新版本里面的,第二个是单元测试, ...

  4. Switch控件详解

    Switch控件详解 原生效果 5.x 4.x 布局 <Switch android:id="@+id/setting_switch" android:layout_widt ...

  5. ToolBar控件详解

    ToolBar控件详解 在Activity中添加ToolBar 1.添加库 dependencies { ... compile "com.android.support:appcompat ...

  6. Android开发:文本控件详解——TextView(一)基本属性

    一.简单实例: 新建的Android项目初始自带的Hello World!其实就是一个TextView. 在activity_main.xml中可以新建TextView,从左侧组件里拖拽到右侧预览界面 ...

  7. Android开发:文本控件详解——TextView(二)文字跑马灯效果实现

    一.需要使用的属性: 1.android:ellipsize 作用:若文字过长,控制该控件如何显示. 对于同样的文字“Android开发:文本控件详解——TextView(二)文字跑马灯效果实现”,不 ...

  8. C++ CComboBox控件详解

    转载:http://blog.sina.com.cn/s/blog_46d93f190100m395.html C++ CComboBox控件详解 (2010-09-14 14:03:44) 转载▼ ...

  9. 【iOS 开发】基本 UI 控件详解 (UIButton | UITextField | UITextView | UISwitch)

    博客地址 : http://blog.csdn.net/shulianghan/article/details/50051499 ; 一. UI 控件简介 1. UI 控件分类 UI 控件分类 : 活 ...

随机推荐

  1. equals方法的编写建议

    1.显示参数命名为 otherObject ,稍后需要将其转换成另一个叫做 other 的变量. 2.检测 this 与 otherObject 是否引用同一个对象: //这条语句只是一个优化.计算这 ...

  2. ionic新入坑-环境搭建+新建项目+打开低版本项目处理

    是的.我又双叒叕入新坑了.想我大学的时候web-app刚火起来.还帮忙做了我们学校医务室系统的web-app页面部分呢.时间太紧最后也没出个完整的版本.那时候只是用H5简单做了web部分.是想着用ph ...

  3. BST讲解

    BST 第一步,什么是BST,所谓BST就是满足一种特定性质的二叉树,这个性质一般情况是当前节点的权值比他的左子树的所有点的权值大,比他的右子树的所有点的权值小,满足这样性质的二叉树就称为BST,下面 ...

  4. Mysql之使用Mysql运算符

    Mysql运算符: 1.算术运算符 加减乘除与求模 SELECT 6+4 加法操作,      6-4 减法操作,      6*4 乘法操作,      6/2 除法操作,    6 DIV 2 除 ...

  5. Fetching data with Ajax小例子

    ajax获取数据示例: 示例1 通过ajax获取txt文件里面的内容示例: <html> <head> <title>Ajax at work</title& ...

  6. [HNOI2014]世界树

    题目描述 世界树是一棵无比巨大的树,它伸出的枝干构成了整个世界.在这里,生存着各种各样的种族和生灵,他们共同信奉着绝对公正公平的女神艾莉森,在他们的信条里,公平是使世界树能够生生不息.持续运转的根本基 ...

  7. codeforces 842C Ilya And The Tree

    Ilya is very fond of graphs, especially trees. During his last trip to the forest Ilya found a very ...

  8. bzoj 1058: [ZJOI2007]报表统计

    Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个 ...

  9. [BZOJ]1064: [Noi2008]假面舞会

    题目大意:n个人,k种假面,每人戴一种,戴第i种的可以看见第i+1种,戴第k种的可以看见第1种,给出m条关系表示一个人可以看到另一个人,问k可能的最大值和最小值.(n<=100,000,m< ...

  10. bzoj2338[HNOI2011]数矩形 计算几何

    2338: [HNOI2011]数矩形 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1535  Solved: 693[Submit][Status ...