AndroidSpinner控制详细说明

摘要: Spinner出示了从一数量据结合中迅速挑选一项值的方法。默认设置状况下Spinner显示信息的是当今挑选的值,点一下Spinner会弹出来一个包括全部可选择值的dropdown莱单,从该莱单中能够为...

Spinner出示了从一数量据结合中迅速挑选一项值的方法。默认设置状况下Spinner显示信息的是当今挑选的值,点一下Spinner会弹出来一个包括全部可选择值的dropdown莱单,从该莱单中能够为Spinner挑选一个新值。

这里写图片描述

图中显示信息的是Spinner普遍的款式。本文中我将探讨1.Spinner的基本使用方法 2.设定Spinner的Adapter (arrayadapter 和自定BaseAdapter)3.Spinner的莱单显示信息方法 4.Spinner的xml特性

非常简单的Spinner

在合理布局文档中加上Spinner控制

 LinearLayout 
 android:layout_width= fill_parent 
 android:layout_height= fill_parent 
 android:orientation= vertical 
 Spinner
 android:id= @+id/spinner1 
 android:layout_width= wrap_content 
 android:layout_height= wrap_content 
 android:entries= @array/languages 
 /LinearLayout 

在其中android:entries= @array/languages 表明Spinner的数据信息结合是以資源数字能量数组languages中获得的,languages数字能量数组資源界定在values/arrays.xml中:

 ?xml version= 1.0 encoding= utf-8 ? 
 resources 
 string-array name= languages 
 item c語言 /item 
 item java /item 
 item php /item 
 item xml /item 
 item html /item 
 /string-array 
 /resources 

假如你没必须对Spinner的挑选恶性事件做响应,那麼一个详细的Spinner应用步骤就完毕了。

运作結果:

这里写图片描述

自然,一般状况下大家是必须响应Spinner挑选恶性事件的,能够根据OnItemSelectedListener的回调函数方式完成

public class MainActivity extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 Spinner spinner = (Spinner) findViewById(R.id.spinner1);
 spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
 @Override
 public void onItemSelected(AdapterView ? parent, View view, 
 int pos, long id) {
 String[] languages = getResources().getStringArray(R.array.languages);
 Toast.makeText(MainActivity.this, 你点一下的是: +languages[pos], 2000).show();
 @Override
 public void onNothingSelected(AdapterView ? parent) {
 // Another interface callback

上边的Spinner看上去十分好看,但是它其实不是一直这般,不久见到的是在android:Theme.Holo.Light主题风格下的实际效果,一样的编码假如在android:Theme.Light下边便会越来越难看。

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

想来这也是许多人不愿应用Spinner的缘故了吧。假如想适配2.3,则只有承受那样的实际效果。

设定Spinner的Adapter
上边应用Spinner数据信息来源于xml数字能量数组,实际上用的数最多的還是根据adapter来跟Spinner关联数据信息。

应用ArrayAdapter

// 原始化控制
Spinner spinner = (Spinner) findViewById(R.id.spinner1);
// 创建数据信息源
String[] mItems = getResources().getStringArray(R.array.languages);
// 创建Adapter而且关联数据信息源
ArrayAdapter String adapter=new ArrayAdapter String (this,android.R.layout.simple_spinner_item, mItems);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//关联 Adapter到控制
spinner .setAdapter(adapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
 @Override
 public void onItemSelected(AdapterView ? parent, View view, 
 int pos, long id) {
 String[] languages = getResources().getStringArray(R.array.languages);
 Toast.makeText(MainActivity.this, 你点一下的是: +languages[pos], 2000).show();
 @Override
 public void onNothingSelected(AdapterView ? parent) {
 // Another interface callback
});

它是Spinner的规范应用方式,在其中,有二行编码能够决策Spinner的外型:

ArrayAdapter String adapter=new ArrayAdapter String (this,android.R.layout.simple_spinner_item, mItems);

第二个主要参数是Spinner未进行莱单时Spinner的默认设置款式,android.R.layout.simple_spinner_item是系统软件内置的内嵌合理布局。

2

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

设定的是进行的情况下往下拉莱单的款式(留意和上边差别),同样android.R.layout.simple_spinner_dropdown_item也是内嵌合理布局。

假如不设定adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)会如何呢?

会导致未进行的sipnner和进行的莱单全是一种合理布局款式。下边一运作截屏来讲明:

沒有adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item):

这里写图片描述

有setDropDownViewResource:

这里写图片描述

你可以能会非常好奇假如设定了setDropDownViewResource可是setDropDownViewResource的主要参数和ArrayAdapter的第二个合理布局主要参数(simple_spinner_item)一致的状况下能如何。状况是和沒有setDropDownViewResource是一样的,由于上边讲过不设定setDropDownViewResource Spinner未进行和进行全是用的一样的合理布局。

实际上simple_spinner_item和simple_spinner_dropdown_item二者的姓名恰好体现了她们的差别。一个运用于往下拉一个运用于Spinner自身。

应用自定的BaseAdapter

这类状况可用于spinner较为繁杂的状况,例如含有标志。

下边大家界定一个挑选联络人的Spinner。

 LinearLayout 
 android:layout_width= fill_parent 
 android:layout_height= 80dip 
 android:orientation= vertical 
 Spinner
 android:id= @+id/spinner2 
 android:layout_width= wrap_content 
 android:layout_height= wrap_content 
 /LinearLayout 

activity中:

 // 原始化控制
 Spinner spinner2 = (Spinner) findViewById(R.id.spinner2);
 // 创建数据信息源
 List Person persons=new ArrayList Person 
 persons.add(new Person( 张三 , 上海市 
 persons.add(new Person( 李四 , 上海市 
 persons.add(new Person( 王五 , 北京市 ));
 persons.add(new Person( 赵六 , 广州市 
 // 创建Adapter关联数据信息源
 MyAdapter _MyAdapter=new MyAdapter(this, persons);
 //关联Adapter
 spinner2.setAdapter(_MyAdapter);

Person.java

.example.spinnerdemo;
public class Person {
 private String personName;
 private String personAddress;
 public Person(String personName, String personAddress) {
 super();
 this.personName = personName;
 this.personAddress = personAddress;
 public String getPersonName() {
 return personName;
 public void setPersonName(String personName) {
 this.personName = personName;
 public String getPersonAddress() {
 return personAddress;
 public void setPersonAddress(String personAddress) {
 this.personAddress = personAddress;
}

MyAdapter.java

.example.spinnerdemo;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
 * 自定兼容器类
 * @author jiangqq a href=jiangqq /a 
public class MyAdapter extends BaseAdapter {
 private List Person mList;
 private Context mContext;
 public MyAdapter(Context pContext, List Person pList) {
 this.mContext = pContext;
 this.mList = pList;
 @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 View getView(int position, View convertView, ViewGroup parent) {
 LayoutInflater _LayoutInflater=LayoutInflater.from(mContext);
 convertView=_LayoutInflater.inflate(R.layout.item_custom, null);
 if(convertView!=null) {
 ImageView imageView = (ImageView)convertView.findViewById(R.id.image);
 imageView.setImageResource(R.drawable.ic_launcher);
 TextView _TextView1=(TextView)convertView.findViewById(R.id.textView1);
 TextView _TextView2=(TextView)convertView.findViewById(R.id.textView2);
 _TextView1.setText(mList.get(position).getPersonName());
 _TextView2.setText(mList.get(position).getPersonAddress());
 return convertView;
}

运作实际效果:

这里写图片描述

Spinner的莱单显示信息方法

它有二种显示信息方式,一种是往下拉莱单,一种是弹出来框,莱单显示信息方式是spinnerMode特性决策的:

android:spinnerMode= dropdown 
android:spinnerMode= dialog 

在android2.3上沒有这一特性,系统软件默认设置将Spinner弹出来莱单显示信息成dialog。下边是Theme.Light和Theme.Holo.Light下Spinner不在同方式下的实际效果比照图。

这里写图片描述

Spinner的xml特性

实际上上边早已提及了Spinner的2个特性:

1 entries: 立即在xml合理布局文档中关联数据信息源(能够不设定,就可以以在Activity中动态性关联)

2 spinnerMode: Spinner的显示信息方式

此外也有以下特性:

prompt:在Spinner弹出来挑选会话框的情况下会话框的题目:

这里写图片描述

特性名字

android:dropDownHorizontalOffset

相匹配方式:

setDropDownHorizontalOffset(int)

spinnerMode= dropdown 时,往下拉的新项目挑选对话框在水准方位相对性于Spinner对话框的偏位量。

它务必是一个含有企业的浮点型规格值,如: 14.5sp 。合理的企业包含:px(清晰度)、dp(相对密度不相干的清晰度)、sp(根据引入字体样式的规格来放缩的清晰度)、in(英寸)、mm(mm)。

这一特性还能够引入一个資源(文件格式:@[package:]type:name)或是是包括这类种类值的主题风格特性(文件格式:?[package][type:]name)。

这一特性相匹配全局性特性資源标记dropDownHorizontalOffset。

android:dropDownSelector

用以设置spinnerMode= dropdown 时目录挑选器的显示信息实际效果。

它能够用 @[+][package]:type:name 文件格式来引入此外的資源,或是是用 ?[package:][type:]name 的文件格式来 运用主题风格特性,还能够是 #rgb 、 #argb 、 #rrggbb 、 aarrggbb 文件格式的色调值。

它相匹配的全局性特性資源标记是dropDownSelector。

android:dropDownVerticalOffset

相匹配方式:

setDropDownVerticalOffset(int)

spinnerMode= dropdown 时,往下拉的新项目挑选对话框在竖直方位相对性于Spinner对话框的偏位量。

这一特性它务必是一个含有企业的浮点型规格值,如: 14.5sp 。合理的企业包含:px(清晰度)、dp(相对密度不相干的清晰度)、sp(根据引入字体样式的规格来放缩的清晰度)、in(英寸)、mm(mm)。

还能够引入一个資源(文件格式:@[package:]type:name)或是是包括这类种类值的主题风格特性(文件格式:?[package][type:]name)。

这一特性相匹配全局性特性資源标记dropDownVerticalOffset。

android:dropDownWidth

相匹配方式:

setDropDownWidth(int)

在spinnerMode= dropdown 时,设置往下拉框的总宽。

这一特性能够是含有企业的浮点型的规格值,如:14.5sp。合理的企业包含:px(清晰度)、dp(相对密度不相干的清晰度)、sp(根据引入字体样式的规格来放缩的清晰度)、in(英寸)、mm(mm)。

还能够引入一个資源(文件格式:@[package:]type:name)或是是包括这类种类值的主题风格特性(文件格式:?[package][type:]name)。

还能够是以下变量定义之一:

fill_parent = -1,往下拉框的总宽应当应用显示屏的总宽来设置。这一变量定义从API Level 8刚开始被废料了,而且应用mach_parent变量定义来替代。

mach_parent = -1,往下拉框的总宽应当应用显示屏的总宽来设置。在API Level 8中被引进。

wrap_content = -2,往下拉框的总宽应当跟它的內容相一致。

它相匹配的全局性資源标记是dropDownWidth。

android:gravity

相匹配方式:

1
setGravity(int)
这一特性用以设定当今挑选的新项目的两端对齐方法。

它务必是下列变量定义值之一或组成(用 | 标记分离出来)。

top = 0x30:把挑选的目标放进它的器皿的顶端,不变变它的规格。

bottom = 0x50:把挑选的目标放进它的器皿的底端,不变变它的规格。

left = 0x03:把挑选的目标放进它的器皿的左侧,不变变它的规格。

right = 0x05:把挑选的目标放进它的器皿的右侧,不变变它的规格。

center_vertical = 0x10:把挑选的目标放进它的器皿的竖直管理中心,不变变它的规格。

fill_vertical = 0x70:以便彻底的添充它的器皿,系统软件会依据必须来提升挑选目标的竖直规格。

center_horizontal = 0x01:把挑选的目标放进它的器皿的水准管理中心,不变变它的规格。

fill_horizontal = 0x07:以便彻底的添充它的器皿,系统软件会依据必须来提升挑选目标的水准规格。

center = 0x11:把挑选的目标放进它的器皿的竖直和水准管理中心,不变变它的规格。

fill = 0x77:以便彻底的添充它的器皿,系统软件会依据必须来提升挑选目标的水准和竖直规格。

clip_vertical = 0x80:额外的可选择设定,它能够设定器皿内子目标的左右边沿剪裁它的器皿外框。剪裁会根据竖直两端对齐的方法:顶端两端对齐的会剪裁底端边沿,底端两端对齐的会剪裁顶端边沿,不容易左右边沿都剪裁。

clip_horizontal = 0x08:额外的可选择设定,它能够设定器皿内子目标的上下边沿剪裁它的器皿外框。剪裁会根据水准两端对齐的方法:左两端对齐的会剪裁右侧缘,右两端对齐的会剪裁左侧缘,不容易上下边沿都剪裁。

start = 0x:把目标放进它的器皿的刚开始部位,不变变它的规格。

end = 0x:把目标放进它的器皿的完毕部位,不变变它的规格。

相匹配的全局性特性資源标记是gravity。

注:Spinner目标是一个视窗目标器皿,设定它的gravity特性时,总是更改器皿內部子视窗目标的两端对齐方法,其实不会更改子视窗內部內容的两端对齐方法。

android:popupBackground

相匹配方式:

1
setPopupBackgroundResource(int)
在spinner= dropdown 时,应用这一特性来设定往下拉目录的情况。

可使用 @[+][package:]type:name 文件格式来引入此外的資源,或是应用 ?[package:][type:]name 文件格式来应 用主题风格特性,还可以应用 #rgb 、 #argb 、 #rrggbb 、 #aarrggbb 文件格式的色调值。

相匹配的全局性特性資源标记是popupBackground



联系我们

全国服务热线:4000-399-000 公司邮箱:343111187@qq.com

  工作日 9:00-18:00

关注我们

官网公众号

官网公众号

Copyright?2020 广州凡科互联网科技股份有限公司 版权所有 粤ICP备10235580号 客服热线 18720358503

技术支持:抽奖h5