自定义Spinner样式以及实现hint效果

android中有个Spinner控件,也就是下拉控件。但是初始的样式比较不好看,所以想着更改下样式。这样就不需要一直用EditText+popupwindow的方式来实现这种效果,会比较这种方式更简单一些。我们来看下实现的效果: 
这里写图片描述

1、正如网上所说的需要准备一张.9图。 
正常的png图片这里写图片描述 
制作成.9后的图片这里写图片描述 
这里写图片描述 
这里稍微提一下在android studio中制作点9图的巨方便的方法,但是需要注意的有两点: 
1、复制图片到drawable文件夹中(你放图片的文件夹),选中这张图片,右击弹出菜单,点击create 9-patch file… 
2、双击产生的.9file图片,Android studio 会自动使用内置的.9图片制作工具打开这张图片 
3、开始制作,在你需要拉伸的地方画黑线 
4、然后保存,最后删掉原来的图片(如果不删除肯定不行啊) 
需要注意的是:as中对点9图的要求比较苛刻,后缀一定要为.9.png还有就是你的原图不能是背景透明的图片。最好你可以点击show bad patches看下这样是否能够拉伸,看黑线。。。注意只要在左边还有顶部画黑线就可以了,右边和底部不需要画。 
5、最后你得到了这个Spinner的背景了,给他的background属性就可以了

贴下xml的代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.coofond.spinnerdemo.MainActivity">

    <Spinner
        android:id="@+id/spn_brand"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:spinnerMode="dropdown"
        android:popupBackground="@android:color/white"
        android:background="@drawable/spbg"
        android:paddingLeft="20dp"
        />
</RelativeLayout>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

二、然后讲下Spinner的hint效果的实现 
主要Spinner的适配器,有个getcount的方法,如果我们返回getCount()-1会使得Spinner一直认为自己本来就少一条,所以除非你在代码里去setSelection(adapter.getCount()-1),否则这个Spinner永远不会自动显示出最后那条。我们就是利用这个原理,将最后一条写成我们想设的hint,就达到了目的。

上自定义的ArrayAdapter的代码:

package com.coofond.spinnerdemo;

import android.content.Context;
import android.widget.ArrayAdapter;

import java.util.List;

/**
 * 给下拉框的适配器
 * Created by IBM on 2016/10/25.
 */

public class simpleArrayAdapter<T> extends ArrayAdapter {
    //构造方法
    public simpleArrayAdapter(Context context, int resource, List<T>  objects) {
        super(context, resource, objects);
    }
    //复写这个方法,使返回的数据没有最后一项
    @Override
    public int getCount() {
        // don't display last item. It is used as hint.
        int count = super.getCount();
        return count > 0 ? count - 1 : count;
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

最后我们的MainActivity.java中的代码就比较方便了:

package com.coofond.spinnerdemo;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Spinner;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity {
    private Spinner mySpinner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
    }

    private void initView() {
        mySpinner= (Spinner) findViewById(R.id.spn_brand);
    }
    private void initData(){
        //数据
        List<String> data_list = new ArrayList<String>();
        data_list.add("北京");
        data_list.add("上海");
        data_list.add("广州");
        data_list.add("深圳");
        data_list.add("请选择品牌");
        //适配器
        simpleArrayAdapter arrAdapter = new simpleArrayAdapter<String>(this, R.layout.simple_spinner_item, data_list);
        //设置样式
        arrAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        //加载适配器
        mySpinner.setAdapter(arrAdapter);
        mySpinner.setSelection(data_list.size() - 1, true);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

这个demo的下载地址: 
http://download.csdn.net/detail/z_zt_t/9664742

总结:最后我们要知道的是这种效果比较容易实现,另外一种方法EditText+popupwindow也是可以实现的。但是我们这种方法也比较方便。主要就是hint和样式这个两个点,讲的很详细了。最后,have a nice day!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值