Android spinner

最近需要做一个功能,在ListView的每个item里有个类似下拉列表的东西,我第一反应就是选择用Spinner控件。一开始我纠结android原生的Spinner右边的图标如何换成其他的图标,在经历了3个多小时的查阅资料,发现并不能换,于是我就想到能否直接给Spinner添加Background,我根据这个想法就开始做起来,最终我完成了和效果图一样的功能实现。

接下来,把我做Spinner过程中的注意点告诉大家 与大家分享:

首先,最上面一行是Spinner未展开的样式,我们只要设置它的Background就好了:

 

<Spinner
    android:id="@+id/spinner"
    android:layout_width="0dp"
    android:layout_weight="1"
    android:layout_height="40dp"
    android:background="@drawable/spinner_bag"
    android:spinnerMode="dropdown" />   //spinnerMode表示下拉列表显示的方式

然后就直接在代码里编写Spinner:

 

final String[] mItems = mContext.getResources().getStringArray(R.array.finish_time);//从Values里面直接获取数组资源
ArrayList<String> arrayList = new ArrayList<>();
for (int i = 0; i < mItems.length; i++) {
    arrayList.add(mItems[i]);
}

 

ArrayAdapter adapter = new ArrayAdapter(mContext,android.R.layout.simple_spinner_item,arrayList);//此处的android.R.layout.simple_spinner_item为Android原生的Spinner未展开时的布局,我们不用动它,arrayList为Spinner下拉列表里的数据集
adapter.setDropDownViewResource(R.layout.spinner_down);//这里的R.layout.spinner_down则是我们自己定义的布局

holder.spinner.setAdapter(adapter);
/**
 * Spinner 监听事件
 */
holder.spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        String[] finish_time = mContext.getResources().getStringArray(R.array.finish_time);
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }
});

好啦,到这里基本上就算结束啦~  还差最后一步!! Spinner基本算写完了,但唯一的问题是它的样式还是和我们预期的不一样,我也是搞了好久,最终发现要在MainFest清单文件里找到Spinner存在的当前Activity,为此Activity添加如下Theme,至此,无论你想要什么样式的下拉列表应该都没问题了~     哦对了,类似的下拉列表,网上还有其他的用TextView+PopWindow的实现,大家可以去参考一下哇~

android:theme="@android:style/Theme.Holo.Light"

推荐一篇Spinner的详解文章点击打开链接

### 使用 Android 中的 Spinner 控件 #### 创建并配置 Spinner 控件 在 XML 文件中声明 `Spinner` 组件时,可以为其指定样式和其他属性来调整外观。例如设置上下填充以及应用自定义风格: ```xml <Spinner ... android:paddingTop="15dp" android:paddingBottom="15dp" style="@style/customSpinnerStyle"/> ``` 此部分描述了如何在界面文件里引入带有特定样式的 `Spinner` 控件[^1]。 #### 关联适配器与数据源 为了向 `Spinner` 添加选项列表,需创建一个实现了 `SpinnerAdapter` 接口的对象,并将其传递给 `Spinner` 的 `setAdapter()` 方法。这一步骤使得能够指定 `Spinner` 显示的具体项目集合: ```java // 假设 sp1 是已初始化的 Spinner 实例 SpinnerAdapter adapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, items); sp1.setAdapter(adapter); // 将 Adapter 和 Spinner 进行绑定 ``` 上述代码展示了怎样利用 `setAdapter()` 函数把 `SpinnerAdapter` 对象分配给名为 `sp1` 的 `Spinner` 变量[^2]。 #### 处理用户交互事件 为了让 `Spinner` 能响应用户的操作,比如改变所选项,则应注册一个监听器。下面的例子说明了如果检测到新项目的选取,会触发相应逻辑处理,如更改其他视图的状态或内容: ```java sp1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { // 当选择了一个新的 item 后执行的操作 TextView textView = findViewById(R.id.textViewId); String selectedColor = colors[position]; // 颜色数组中的位置对应的颜色字符串 textView.setTextColor(Color.parseColor(selectedColor)); } @Override public void onNothingSelected(AdapterView<?> parentView) { // 用户未做任何选择时可在此处编写默认行为 } }); ``` 这里演示的是通过监听 `onItemSelected` 事件更新另一个 `TextView` 的文本颜色至由 `Spinner` 所选定的颜色值[^3]. #### 应用场景举例 考虑构建一款简单的书籍浏览器应用,其中包含有多个可供挑选的书名作为 `Spinner` 下拉菜单里的条目;一旦用户做出选择,便会展示该书目的封面图像连同简介文字于屏幕下方区域。此类应用场景体现了 `Spinner` 在实际开发过程中的灵活性和实用性[^4].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值