自定义TintSpinner的样式

首先为啥要用TintSpinner 而不是Spinner?

参见使用AppCompat_v7 21.0.0d的几个兼容问题

然后是我们要自定义的效果是

也就是说选中的样式是白色的文字,下拉的样式是黑色的文字,这样一个小小的需要,也很需要技巧。

首先,TintSpinner的adapter需要使用ArrayAdapter,而不能使用BaseAdapter,之前我走的弯路是想用BaseAdapter然后在找

adapter.setDropDownViewResource(R.layout.drop_down_item);

方法,结果显然易见,BaseAdapter更不就没有这个方法,为啥?

因为BaseAdapter实现的是ListAdapter, SpinnerAdapter接口:

public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter

而ArrayAdapter是BaseAdapter的子类

public class ArrayAdapter<T> extends BaseAdapter implements Filterable

所以看到在找不到setDropDownViewResource方法。

疑惑解除了,下面就看下怎么实现了这个adapter了:

model为

public class EndemicArea {

    @JsonField("description")
    private String description;
    @JsonField("name")
    private String name;
    @JsonField("pk")
    private int pk;

    public EndemicArea(String description, String name, int pk) {
        this.description = description;
        this.name = name;
        this.pk = pk;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPk() {
        return pk;
    }

    public void setPk(int pk) {
        this.pk = pk;
    }

}

Adapter为:

public class EndemicAreaSpinnerAdapter extends ArrayAdapter<EndemicArea> {

    private LayoutInflater layoutInflater;

    public EndemicAreaSpinnerAdapter(Context context, int resource, List<EndemicArea> endemicAreaList) {
        super(context, resource, endemicAreaList);
        layoutInflater = LayoutInflater.from(context);

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = layoutInflater.inflate(R.layout.choose_bed_item, null);
        TextView areaName = (TextView) view.findViewById(R.id.choose_bed_item_name);
        areaName.setText(getItem(position).getName());
        return view;
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        View view = layoutInflater.inflate(android.R.layout.simple_spinner_dropdown_item, parent, false);
        CheckedTextView areaName = (CheckedTextView) view.findViewById(android.R.id.text1);
        areaName.setText(getItem(position).getName());
        return view;
    }
}

choose_bed_item.xml为

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/choose_bed_item_name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="4dp"
    android:gravity="center"
    android:paddingBottom="10dp"
    android:layout_marginRight="8dp"
    android:paddingTop="10dp"
    android:textColor="@color/white"
    android:textSize="20sp">

</TextView>

最后:

 tintSpinner = new TintSpinner(getActivity());
        tintSpinner.setBackgroundResource(R.drawable.abc_spinner_mtrl_am_alpha);
        tintSpinner.setAdapter(spinnerAdapter);

注意:TintSpinner来着import android.support.v7.internal.widget.TintSpinner;

看来Spinner需要ArrayAdapter才能定制下拉的样式,然后就可以完全自定义了。

时间: 2024-12-09 18:38:56

自定义TintSpinner的样式的相关文章

Android自定义进度条样式

最近在做一个widget,上面需要一个progressbar,产品经理和设计师给出来的东西是要实现一个圆角的progress和自定义的颜色,研究一小下,分享出来给大家哦. 测试于:Android4.0+ 操作步骤: 1.创建你的layout文件引用progressbar如下,标红处引用你自定的样式: <ProgressBar android:id="@+id/progressDownload" style="?android:attr/progressBarStyleH

Android中自定义下拉样式Spinner

Android中自定义下拉样式Spinner 本文继续介绍android自定义控件系列,自定义Spinner控件的使用. 实现思路 1.定义下拉控件布局(ListView及子控件布局) 2.自定义SpinerPopWindow类 3.定义填充数据的Adapter 效果图 一.定义控件布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http:/

jQuery Validate 表单验证插件----自定义校验结果样式

一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW  访问密码 f224 二.引入依赖包 <script src="../../scripts/jquery-1.3.1.js" type="text/javascript"></script> <script src="lib/jquery.validate.js" type="text/javascript"

WinForm自定义ListBox显示样式

WinForm自定义ListBox显示样式,多列分不同颜色显示,效果如下图: 首先向winForm窗口拖入一个ListBox控件,命名为lstConsole,同时将DrawMode设置为:OwnerDrawFixed,这里一定要注意否则我们接下来的工作都不会起作用. 然后我们来自定义ListBoxItem,代码如下: public class ColoredListBoxItem { /// <summary> /// creates a new ColoredListBoxItem ///

jQuery 自定义网页滚动条样式插件 mCustomScrollbar 的介绍和使用方法

如果你构建一个很有特色和创意的网页,那么肯定希望定义网页中的滚动条样式,这方面的 jQuery 插件比较不错的,有两个:jScrollPane 和 mCustomScrollbar. 关于 jScrollPane,大家见过的可能比较多,但是这个插件太过于古老而且功能不强大,效果在几年前非常不错,但是放在现在就不好说了.所以我选择了后者:mCustomScrollbar.下图是两者官方示例的简单对比: 本文就是介绍如何使用 mCustomScrollbar 这个插件,大部分的内容是翻译自 mCus

自定义的ChecBox 样式

.xml里面 <CheckBox android:id="@+id/checkBox1" android:layout_width="29dp" android:layout_height="29dp" android:layout_alignBaseline="@+id/textView1" android:layout_alignBottom="@+id/textView1" android:la

CSS自定义鼠标指针样式

原文链接: http://davidwalsh.name/css-custom-cursorDemo地址: http://davidwalsh.name/demo/css-custom-cursor.php原文日期: 2014-09-16翻译日期: 2014-09-17翻译人员: 铁锚 还记得Web 1.0时代的那些苦逼岁月吗? 你想尽一切办法来优化你的网站. 还要饱受IE6惨无人道的虐待,举个栗子, IE中那些害死人不偿命的滚动条, 我一直记得第三方类库 CometCursor. CometC

css Cursor:url()自定义鼠标指针样式为图片

css自定义鼠标指针样式为图片Cursor:url()的使用,今天在项目中,要用到自定义鼠标样式,格式: css:{cursor:url('绝对路径的图片(格式:cur,ico)'),-moz-zoom-out;}//FF下面 css:{cursor:url('绝对路径'),auto;}//IE,FF,chrome浏览器都可以 前面url是自定义鼠标格式,图像的绝对路径地址,后面的参数是css标准的cursor样式,(IE下面可以不需要) 图标的格式根据不同的浏览器来分:IE支持cur,ani,

axure自定义文本框样式

axure中的文本框是我们经常使用的元件,但它本身对样式的设置很有限,不能设置边框样式.阴影等,不能满足我们制作高保真原型的需求,本文给大家介绍一下结合矩形元件自定义文本框样式.(PS:此处的"高保真"指的是UI上的设计,对于原型保真程度的说明,请参考我的另一片文章<产品原型设计浅见>). 如果我们要制作下图这种圆角输入框,首先拖入一个文本框.一个矩形到设计区域,将矩形置于底层,调整矩形的大小能够刚刚包围住文本框,给矩形增加一点圆角,把矩形的颜色弄浅一点,我设置的色值是#9