在看完mars的Spinner之后觉得很一般,因为Spinner的用法精髓并没有展示出来

后来看了Android讲义 觉得讲得不错

一、静态配置

//layout

main.xml:

<Spinner

android:id="@+id/test"

android:layout_width="fill_width"

android:layout_height="wrap_content"

android:entries="@array/books"

/>

//res中

arrays.xml

<resources>

<string-array name="books">

<item>tomtom</item>

<item>tomtom</item>

<item>tomtom</item>

</string>

</resources>

二、动态配置

需要一个适配器

package org.crazyit.spinner;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TableLayout;
import android.widget.TextView;/*** Description:* <br/>site: <a href="http://www.crazyit.org">crazyit.org</a> * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee* <br/>This program is protected by copyright laws.* <br/>Program Name:* <br/>Date:* @author  Yeeku.H.Lee kongyeeku@163.com* @version  1.0*/
public class SpinnerTest2 extends Activity
{@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);BaseAdapter ba = new BaseAdapter(){@Overridepublic int getCount(){//指定一共包含10个选项return 10;}@Overridepublic Object getItem(int position){return null;}@Overridepublic long getItemId(int position){// TODO Auto-generated method stubreturn 0;}
//          //重写该方法,该方法返回的View将作为列表框的每项
//          @Override
//          public View getView(int position, View convertView, ViewGroup parent)
//          {
//              TextView text = new TextView(SpinnerTest2.this);
//              text.setText(position"");
//              text.setTextSize(20);
//              text.setTextColor(R.color.red);
//              return text;
//          }//重写该方法,该方法返回的View将作为列表框的每项@Overridepublic View getView(int position, View convertView, ViewGroup parent) {//创建一个LinearLayout,并向其中添加2个组件LinearLayout line = new LinearLayout(SpinnerTest2.this);line.setOrientation(0);ImageView image = new ImageView(SpinnerTest2.this);image.setImageResource(R.drawable.icon);TextView text = new TextView(SpinnerTest2.this);text.setText(position + "");text.setTextSize(20);text.setTextColor(R.color.red);line.addView(image);line.addView(text);//返回LinearLayout实例return line;}      };Spinner spinner = (Spinner)findViewById(R.id.test);spinner.setAdapter(ba);}
}

我们大家都应该知道,android给我们提供了一个spinner控件,这个控件主要就是一个列表,那么我们就来说说这个控件吧,这个控件在以前的也看见过,但今天还是从新介绍一遍吧。Spinner位于 android.widget包下,每次只显示用户选中的元素,当用户再次点击时,会弹出选择列表供用户选择,而选择列表中的元素同样来自适配器。Spinner是View类得一个子类。讲完了这些,我们就给大家来看看是一个这么样的效果。

效果图:

字符串资源string.xml

Java代码:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, Activity01!</string>
<string name="app_name">xh_spinner_test</string>
<string name="ys">您的爱好</string>
<string name="lq">篮球</string>
<string name="zp">足球</string>
<string name="pq">排球</string>
</resources>

颜色资源 colors.xml

Java代码:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="red">#fd8d8d</color>
<color name="green">#9cfda3</color>
<color name="blue">#8d9dfd</color>
<color name="white">#FFFFFF</color>
<color name="black">#000000</color>
</resources>

布局文件 main.xml

Java代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView 
android:text="@string/ys"
android:id="@+id/TextView01"
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:textSize="28dip"
/>
<Spinner
android:id="@+id/Spinner01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>

Java代码:
package eoe.sp;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.AdapterView.OnItemSelectedListener;

public class Activity01 extends Activity {
final static int WRAP_CONETNT = -2;// 表示WRAP_CONTENT的常量
// 所有资源的图片(足球、篮球、排球) id的数组
int[] drawableIds = { R.drawable.football, R.drawable.basketball,
R.drawable.volleyball };
// 所有资源字符串 (足球、篮球、排球) id的数组
int[] msgIds = { R.string.zp, R.string.lq, R.string.pq };

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Spinner sp = (Spinner) findViewById(R.id.Spinner01);
BaseAdapter ba = new BaseAdapter() {

public int getCount() {
// 一共三个选项
return 3;
}

public Object getItem(int position) {
return null;
}

public long getItemId(int position) {
return 0;
}

public View getView(int position, View convertView, ViewGroup parent) {
// 动态生成每个下拉项对应的View,每个下拉项View由LinearLayout
// 中包含一个ImageView及一个TextView构成
// 初始化LinearLayout
LinearLayout ll = new LinearLayout(Activity01.this);
ll.setOrientation(LinearLayout.HORIZONTAL);
// 初始化ImageView
ImageView ii = new ImageView(Activity01.this);
ii.setImageDrawable((getResources().getDrawable(drawableIds[position])));
ll.addView(ii);
// 初始化TextView
TextView tv = new TextView(Activity01.this);
tv.setText(" " + getResources().getText(msgIds[position]));
tv.setTextColor(R.color.black);
tv.setTextSize(24);
ll.addView(tv);
return ll;
}
};
// 为Spinner设置内容适配器
sp.setAdapter(ba);
sp.setOnItemSelectedListener(new OnItemSelectedListener() {

public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// 获取主界面TextView
TextView tv = (TextView) findViewById(R.id.TextView01);
// 获取当前选中选项对应的LinearLayout
LinearLayout ll = (LinearLayout) view;
// 获取其中的TextView
TextView tvn = (TextView) ll.getChildAt(1);
// 用StringBuilder动态生成信息
StringBuilder sb = new StringBuilder();
sb.append(getResources().getText(R.string.ys));
sb.append(":");
sb.append(tvn.getText());
// 信息设置进住界面
tv.setText(sb.toString());
}

public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}

Spinner的详解相关推荐

  1. Android之Spinner使用详解

    Spinner(列表选择框)的基本使用 当我们的app需要用户输入数据时,除了让用户自己打字以外,还有一种比较贴心的设计: 列出一组选项让用户从中挑选,从而方便了我们的用户! Spinner组件一共有 ...

  2. android studio 下拉菜单,android studio 的下拉菜单Spinner使用详解

    一.认识Spinner Spinner其实就是一个列表选择框.不过Android的列表选择框并不需要显示下拉列表,而是相当于弹出一个菜单供用户选择. Spinner 与 Gallery 都继承了Abs ...

  3. Spinner用法详解

    Spinner组件一共有两个,一个是本身的Spinner,一个是android.support.v7.widget.AppCompatSpinner 两者的区别在于v7内的Spinner是兼容低版本的 ...

  4. Spinner控件详解

    Spinner控件详解 效果图 修改Spinner样式 在介绍之前,先看一下系统原生的样式 6.x & 5.x系统样式 4.x系统样式 官方文档 XML属性 方法 描述 android:dro ...

  5. 《JavaScript凌厉开发 Ext详解与实践》的目录

    目    录 第1章  开篇.... 1 1.1  网络开发浪潮..... 2 1.2  RIA三足鼎立..... 2 1.2.1  Flex和OpenLaszlo.. 3 1.2.2  Faces客 ...

  6. jquery ui tabs详解(中文) 【转载】

    1 属性 1.11 ajaxOptions,当选项卡加载内容时,添加一个ajax选项.只有ajax时,添加的ajax选项才起作用.默认值为null.上面的例子中,添加了beforeSend和succe ...

  7. vue-cli脚手架中webpack配置基础文件详解

    一.前言 vue-cli是构建vue单页应用的脚手架,输入一串指定的命令行从而自动生成vue.js+wepack的项目模板.这其中webpack发挥了很大的作用,它使得我们的代码模块化,引入一些插件帮 ...

  8. 精品教程--Android组件详解

    下载源码 1.显示文本的组件--TextView.. 11 (1)基本使用,显示文本... 11 (2)显示URL链接... 12 (3)带边框的TextView.. 13 2.可输入文本的组件--E ...

  9. Android UI 测试框架Espresso详解

    Android UI 测试框架Espresso详解 1. Espresso测试框架 2.提供Intents Espresso 2.1.安装 2.2.为Espresso配置Gradle构建文件 2.3. ...

最新文章

  1. Transaction And Lock--锁相关基础
  2. pytorch 自定义参数不更新
  3. Scrum项目5.0
  4. Python处理mat文件的三种方式
  5. 如何提取D-Link解密密钥
  6. how to setup a Kubernetes cluster on GCP
  7. Rabbits —— HDU-6227
  8. URL传Base64 造成报错 Illegal base64 character 20
  9. Ubuntu 配置MySQL远程连接
  10. 有关Activity的Launch mode 以及Intent的setFlags(转载)
  11. cisco 次优路由
  12. docker部署php的性能,Docker 学习之部署php + nginx(一)
  13. WSL2之kali安装界面kex
  14. 油猴/暴力猴工具换cook脚本
  15. 清华生的多年奋斗领悟
  16. rpcx服务框架浅析13-远程调用
  17. 如何寻找数组中最大值与最小值(取双元素法)
  18. 贪心法 第1关:找零钱
  19. 第四篇:coalesce 和repartition 在shuffle 和并行度之间的选择(spark2.3持续更新中...........)
  20. 实验一 查看CPU和内存,用机器指令和汇编指令编程

热门文章

  1. oracle 根据手机号判断三大运营商函数
  2. 分压后方波变成了三角波?
  3. java selenium一一操作定位元素
  4. Pytest全栈自动化测试指南-夹具入门
  5. 面试题(2)阿里最全面试100题
  6. 区别gcc中的-w -W和-Wall选项
  7. 工控机or拓展坞USB供电不足问题发现与解决方案
  8. 【Apollo】支持@ConfigurationProperties动态刷新
  9. 27岁自学python找工作_27岁0基础自学Python,多久可以找到工作?
  10. Android 从6.0,7.0,8.0,9.0,10.0的特性整理和适配方案(不好含全部新特性,总结了一些可能应用中会遇到的)