Spinner:下拉选择

QuibblerQuibbler 2020-05-27 约 10 分钟 1592 次阅读

Spinner:下拉选择

简单介绍一个Android中的下拉选择控件:Spinner,别看它小巧,用处靠发挥开发者的创造力,比如搜索输入框中不断更新的提示词可以用Spinner。源码路径:frameworks/base/core/java/android/widget/Spinner.java

1、Spinner

在布局中添加Spinner

<Spinner
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/mediastore" />

2、Spinner数据

下拉选择得有选项,这些数据有多种方式添加到Spinner中。下面介绍:

2.1、Spinner数据

在布局中直接引用arrays.xml文件中定义的array数组:

<Spinner
        ...
        android:entries="@array/mediastore" />

/values/arrays.xml文件中定义的数组:

<resources>
    <string-array name="mediastore">
        <item>File</item>
        <item>Audio</item>
        <item>Video</item>
        <item>Images</item>
        <item>Downloads</item>
    </string-array>
</resources>

2.2、ArrayAdapter

Android系统中其实预设了很多基本的ArrayAdapter可以直接拿来适配简单的数据:String集合。

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, STRINGS);
    mChoose.setAdapter(adapter);

这里也直接使用了Android系统的布局android.R.layout.simple_list_item_1,其中只有一个TextView展示String字符串:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
    android:minHeight="?android:attr/listPreferredItemHeightSmall" />

2.3、SpinnerAdapter

Spinner提供了SpinnerAdapter接口Adapter,实现这个接口,实现里面的方法和普通的Adapter一样。

SpinnerAdapter定义如下,也是继承了Adapter接口:

public interface SpinnerAdapter extends Adapter {
        public View getDropDownView(int position, View convertView, ViewGroup parent);
    }

自定义SpinnerAdapter只需实现上面的接口中的方法,例:

public class ChooseSpinnerAdapter implements SpinnerAdapter {
        private List<String> mStringArrayList = new ArrayList<>();
        private Context mContext;
        
        public ChooseSpinnerAdapter(Context context) {
            this.mContext = context;
        }
        
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = LayoutInflater.from(mContext).inflate(R.layout.spinner, null);
            return view;
        }
        
        @Override
        public View getDropDownView(int position, View convertView, ViewGroup parent) {
            View view = LayoutInflater.from(mContext).inflate(R.layout.spinner, null);
            return view;
        }
        
        @Override
        public int getCount() {
            return mStringArrayList.size();
        }
        
        @Override
        public String getItem(int position) {
            return mStringArrayList.get(position);
        }
        
        @Override
        public long getItemId(int position) {
            return position;
        }
        
        @Override
        public boolean hasStableIds() {
            return true;
        }
        
        @Override
        public int getItemViewType(int position) {
            return 1;
        }
        
        @Override
        public int getViewTypeCount() {
            return 1;
        }
        
        @Override
        public boolean isEmpty() {
            return false;
        }
        
        @Override
        public void registerDataSetObserver(DataSetObserver observer) {
        }
        @Override
        public void unregisterDataSetObserver(DataSetObserver observer) {
        }
    }

其中的getDropDownView()方法获取下拉每个Item的View,getView()就是获取已选择的View,一般这两个方法内容是一样的。其次getItemViewType()和getViewTypeCount()方法获取类型,返回1即可。至于其它的方法和Adapter一样。

除此之外,可以发现还有另外一个Adapter:ThemedSpinnerAdapter,没有实际使用,从类名可以看出应该是和自定义下拉选择主题相关的Adapter。

推荐博客:

       Android 好用的下拉控件Spinner

相关推荐

精选
ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager
Android

ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager

ViewPager1、ViewPagerandroidx.viewpager.widget.ViewPager,Android中使用非常广泛的控件,可以说是APP必备:首次打开引导页、页面Banner广告等。常用方法:setAdapter() 设置适配器setOffscreenPageLimit() 设置缓存的页面个数,默认是 1setCurrentItem() 跳转到特定的页面setOnPage

1.1k
获取Android内置WebView内核版本
Android

获取Android内置WebView内核版本

获取Android内置WebView内核版本竟然能遇到这样奇葩的事情,网页用的技术过于新颖,以至于只支持高版本Chromium内核的,低版本安卓系统中内置的内核版本较低,无法加载前端页面。1、设置查看在系统设置里 > 应用 > 应用管理 > 显示系统应用,查看WebView组件:2、页面查看通过WebView发起的网络请求,都会带上浏览器的UA,通常页面都可以通过UA判断浏览器的内核版本。这里有两

1.1w
Android 14适配总结
Android

Android 14适配总结

Android 14适配总结毕业工作至今已经适配了三个Android大版本,从Android 11到Android 12、再到Android 13。2023年,Google即将推出的Android 14,上半年已经开始第一批适配。现在,第四个Android版本已经适配完,总结记录一下。1、Android 14计划Google一般会在2月份对外发布预告,同时放出开发者预览版。“拉通”各大平台、厂商以

1.1w