最新Spinner用法详解

最新Spinner用法详解

这里写图片描述

Spinner组件一共有两个,一个是本身的Spinner,一个是android.support.v7.widget.AppCompatSpinner

两者的区别在于v7内的Spinner是兼容低版本的,Spinner再高版本中才能使用的方法换了v7下的Spinner后可以一直兼容到2.1 (v7兼容到api7),初次之外两者的使用没有其他差别,推荐使用v7,保证效果在不同版本上都能显示.

Spinner的使用步骤:

这里写图片描述

布局中设置数据源和主题,特点是方便快捷,缺点是不能动态改变要显示的数据,使用适配器特点是灵活多变,针对项目需求来选择.

xml中设置数据源和主题

设置数据源
//使用entries属性,传入的是values文件夹下的arrays.xml内的数据
 <android.support.v7.widget.AppCompatSpinner
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:entries="@array/week">
values/arrays.xml文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="week">
        <item >星期一</item>
        <item >星期二</item>
        <item >星期三</item>
        <item >星期四</item>
        <item >星期五</item>
        <item >星期六</item>
        <item >星期天</item>
    </string-array>
</resources>
经过上面的操作之后Spinner就能用了(点击事件之后再添加),效果如下:
这里就把常用的xml属性贴一下:

这里写图片描述

都比较好理解,解释一下其中的几个属性:
android:spinnerMode  //显示模式 :popu和dialog两种
android:prompt //当显示模式为dialog时生效,作用为显示dialog的标题内容

这里写图片描述这里写图片描述

显示主题的设置
app:theme="@style/myDropTheme"  
//设置的是下拉item的主题 ,但是会覆盖未下拉的显示
//所以如果不想再代码中设置主题的话最好主题设置成白色背景的,效果比较好
style.xml - myDropTheme
<style name="myDropTheme" parent="Widget.AppCompat.DropDownItem.Spinner">
        <item name="android:textColor">@color/colorAccent</item>
        <item name="android:textSize">20sp</item>
        <item name="android:background">@color/colorPrimary</item>
    </style>

如下:

添加响应事件:

Spinner的响应事件是OnItemSelectedListener ,千万不要写出onItemClickListener,否则直接报错:
 mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                //选择列表项的操作
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                //未选中时候的操作
            }
        });

代码中设置Spinner

布局文件中只需要包含基本的宽高等属性即可
适配器的选择:
最方便的的适配器是ArrayAdapter,缺点是只能显示单个TextView内容(采用List存储数据)
 ArrayAdapter arrayAdapter = new ArrayAdapter(mContext, R.layout.item_select, mList);
 //传入的参数分别为 Context , 未选中项的textview , 数据源List
//单独设置下拉的textview
arrayAdapter.setDropDownViewResource(R.layout.item_drop);
R.layout.item_select
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:textSize="20dp"
    android:typeface="serif"
    android:gravity="center"
    android:textColor="#000000"
    android:layout_height="match_parent"
    android:background="@color/colorAccent"
    android:orientation="vertical">

</TextView>
R.layout.item_drop
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="5dp"
    android:background="@color/colorPrimary"
    android:gravity="center"
    android:orientation="vertical"
    android:textColor="#000000"
    android:textSize="20dp">

</TextView>

效果如下所示(设置颜色是为了区分:
这里写图片描述这里写图片描述

自定义Adapter
实际的需求中有可能需要Spinner的下拉不单单显示一个TextView,那么这个时候就需要对适配器进行自定义
private class MyAdapter implements SpinnerAdapter {



        @Override
        public void registerDataSetObserver(DataSetObserver observer) {

        }

        @Override
        public void unregisterDataSetObserver(DataSetObserver observer) {

        }

        @Override
        public int getCount() {
            return mList.size();
        }

        @Override
        public Object getItem(int position) {
            return mList.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public boolean hasStableIds() {
            return false;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            TextView textView = new TextView(mContext);
            textView.setTextSize(30);
            textView.setBackgroundColor(getResources().getColor(R.color.colorAccent));
            textView.setText(mList.get(position));
            return textView;
        }

        @Override
        public int getItemViewType(int position) {
            return 1;
        }

        @Override
        public int getViewTypeCount() {
            return 1;
        }

        @Override
        public boolean isEmpty() {
            return false;
        }

        @Override
        public View getDropDownView(int position, View convertView, ViewGroup parent) {
            TextView textView = new TextView(mContext);
            textView.setTextSize(30);
            textView.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
            textView.setText(mList.get(position));
            return textView;
        }
    }
效果如下(对下拉和默认显示设置了颜色作为区分,且为方便起见没用引用布局文件,设置了下拉偏移):

这里写图片描述

至此适配器的使用的完成了,可以实现默认显示的和下拉的使用相同布局,也可是不同的布局,基本上满足需求了

另外还有几个在23中新出的方法,可以做更多的自定义(使用AppcomptSpinner可适配到低版本):

mSpinner.setPopupBackgroundResource(R.drawable.back);
mSpinner.setBackgroundResource(R.drawable.back);
//给默认显示项和下拉菜单设置背景      

简单的添加了背景

这里写图片描述

完毕

  • 13
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
很全面的Ace Admin1.3官方文档,包含有最全面的组件及例子,适合急需使用该技术开发的人。 响应式Bootstrap网站后台管理系统模板ace admin,非常不错的轻量级易用的admin后台管理系统,基于Bootstrap3,拥有强大的功能组件以及UI组件,基本能满足后台管理系统的需求,而且能根据不同设备适配显示,而且还有四个主题可以切换。 网页图标全采用FontAwesome,除Bootstrap,jQuery UI使用到的第三方插件有: jQuery 2.0.3 jQuery UI 1.10.3 (Custom Build) Twitter Bootstrap 3.0.0 FontAwesome 3.2.1 Google "Open Sans" Font jQuery Flot Charts 0.8.1 jQuery Sparklines 2.1.2 Easy Pie Chart 1.2.5 jQuery Knob 1.2.0 jQuery Validate 1.11.1 FuelUX 2.3.0 (Spinner & Wizard & Treeview) FullCalendar 1.6.4 jQuery ColorBox 1.4.27 jQuery dataTables 1.9.4 jQuery Chosen 1.0 jQuery Masked Input 1.3.1 jQuery Input Limiter 1.3.1 jQuery AutoSize 1.17.7 Bootstrap Colorpicker Bootstrap Datepicker Bootstrap Timepicker v0.2.3 Bootstrap DateRange Picker 1.2 Bootbox.js 4.0.0 jQuery Gritter 1.7.4 jQuery slimScroll 1.1.1 Spin.js 1.3.0 jQuery UI Touch Punch 0.2.2 Google Code Prettify ExplorerCanvas Mindmup Wysiwyg Editor Toopay Markdown Editor 1.1.4 X-editable 1.4.6 Select2 3.4.2 Bootstrap Tags 2.2.5 jQuery Mobile 1.3.2 (Custom Build) jqGrid 4.5.2 Dropzone.js 3.0 Nestable lists plugin 浏览器兼容: Firefox 5+ Google Chrome 14+ Internet Explorer 8 Internet Explorer 9 Opera 11 Safari 5 Bootstrap兼容: Bootstrap 2.2.x Bootstrap 2.3.x Bootstrap 3.0.x ace admin
Android Spinner 是一种可下拉选择的视图控件,类似于 HTML 中的 select 标签。下面是 Android Spinner 的基本用法: 1. 在布局文件中添加 Spinner 控件: ```xml <Spinner android:id="@+id/spinner" android:layout_width="wrap_content" android:layout_height="wrap_content" /> ``` 2. 在 Activity 或 Fragment 中获取 Spinner 对象,并为其设置数据源和选中事件监听器: ```java Spinner spinner = findViewById(R.id.spinner); // 设置数据源 List<String> dataList = new ArrayList<>(); dataList.add("选项1"); dataList.add("选项2"); dataList.add("选项3"); ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, dataList); 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 position, long id) { String selectedItem = (String) parent.getItemAtPosition(position); // 处理选中事件 } @Override public void onNothingSelected(AdapterView<?> parent) { // 未选择任何项时的处理 } }); ``` 其中,第一步的布局文件中的 Spinner 控件只是一个空的下拉框,需要通过 ArrayAdapter 设置数据源,才能在下拉框中显示选项。ArrayAdapter 的构造方法需要传入三个参数:上下文对象、Spinner 的每个选项所对应的布局文件和数据源。在上述代码中,每个选项所对应的布局文件使用了系统自带的 simple_spinner_item,数据源是一个包含三个字符串的 List。 第二步中,setOnItemSelectedListener 方法设置了选中事件监听器。当用户选择某个选项时,onItemSelected 方法会被调用,可以在该方法中处理选中事件。onNothingSelected 方法则是当未选择任何选项时的回调方法。 以上就是 Android Spinner 的基本用法。除此之外,Spinner 还有很多自定义的属性和方法,可以根据实际需要进行设置和调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值