`

Spinner 使用方法小结

阅读更多

android里的Spinner其实就是个ComboBox =。=
一。基本使用方法:
main.xml 不多解释

<? 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"
    
>
< Spinner
     
android:id  = "@+id/mySpinner"
     android:layout_width 
= "fill_parent"
     android:layout_height 
="wrap_content"
     
/>
</ LinearLayout >


在string.xml中使用“string-array”定义数据源。

<? xml version="1.0" encoding="utf-8" ?>
< resources >
    
< string  name ="app_name" > MySpinnerDemo </ string >
    
< string-array  name  = "phones_array" >
        
< item > iPhone </ item >
        
< item > Android </ item >
        
< item > BlackBerry </ item >
    
</ string-array >
</ resources >


Activity类:

package  com.yinger;

import  android.app.Activity;
import  android.os.Bundle;
import  android.view.View;
import  android.widget.AdapterView;
import  android.widget.ArrayAdapter;
import  android.widget.Spinner;
import  android.widget.AdapterView.OnItemSelectedListener;

/**
 * Spinner Demo
 * 
@author  Yinger
 * @time 2011-7-9 下午01:54:59
 * @mail melody.crazycoding@gmail.com
 
*/
public   class  SpinnerDemo  extends  Activity {
    Spinner spinner 
=   null ;
    String selected 
=   " 0 " ;
    
    
/**  Called when the activity is first created.  */
    @Override
    
public   void  onCreate(Bundle savedInstanceState) {
        
super .onCreate(savedInstanceState);
        setContentView(R.layout.main);
        spinner 
=  (Spinner)findViewById(R.id.mySpinner);
        initMySpinner();
    }

    
private   void  initMySpinner() {
        ArrayAdapter
< CharSequence >  adapter  =  ArrayAdapter.createFromResource(
                
this , R.array.phones_array,
                android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        spinner.setPrompt(
" test " );
        spinner.setOnItemSelectedListener(
new  SpinnerOnSelectedListener());
    }
    
    
class  SpinnerOnSelectedListener  implements  OnItemSelectedListener{
        
public   void  onItemSelected(AdapterView <?>  adapterView, View view,  int  position,
                
long  id) {
            
//  TODO Auto-generated method stub
            selected  =  adapterView.getItemAtPosition(position).toString();
            System.out.println(
" selected===========> "   +  selected);
        }

        
public   void  onNothingSelected(AdapterView <?>  arg0) {
            
//  TODO Auto-generated method stub
            System.out.println( " selected===========> "   +   " Nothing " );
        }
    }
}


二。debug发现的一个小问题:
Spinner在初始化时会自动调用一次OnItemSelectedListener事件
原因:有人说是Bug,其实这与C#的事件机制类似,懒得说了=。=
提供的解决办法:
个人是通过在事件注册之前调用

spinner.setSelection( 0 true );

但要注意,使用此方法,如果用户选择的也是第一项,那么OnItemSelectedListener事件不会被触发……

三。使用技巧
1.动态添加Spinner的数据源
修改initMySpinner方法,代码如下:

private   void  initMySpinner() {
        String[] phones 
=  { " iPhone " , " Android " , " BlackBerry " };
        ArrayAdapter
< String >  adapter  =   new  ArrayAdapter < String > (
                
this ,  android.R.layout. simple_spinner_item,
                phones);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        spinner.setPrompt(
" test " );
        spinner.setSelection(
0 true );
        spinner.setOnItemSelectedListener(
new  SpinnerOnSelectedListener());
    }


2.自定义Spinner的Layout,替换掉体统默认的android.R.layout.simple_spinner_item
super easy
my_spinner_item.xml:

<? xml version="1.0" encoding="utf-8" ?>
< TextView  xmlns:android ="http://schemas.android.com/apk/res/android"
    android:layout_width
="fill_parent"  
    android:layout_height
="wrap_content"
    android:textSize
="12dip"  
    android:textColor
="#FF8B1500"  
    android:gravity
="center"   />

修改adapter:

ArrayAdapter < String >  adapter  =   new  ArrayAdapter < String > (
                
this ,  R.layout.my_spinner_item,
                phones);

同理,可自定义layout,替换掉android.R.layout.simple_spinner_dropdown_item

3.同时显示图片和文本
自定义Adapter:

package  com.yinger;

import  android.content.Context;
import  android.graphics.Color;
import  android.view.Gravity;
import  android.view.View;
import  android.view.ViewGroup;
import  android.widget.BaseAdapter;
import  android.widget.ImageView;
import  android.widget.LinearLayout;
import  android.widget.TextView;

/**
 * 自定义Adapter
 * 
@author  Yinger
 * @time 2011-7-9 下午03:39:34
 * @mail melody.crazycoding@gmail.com
 
*/
public   class  MyAdapter  extends  BaseAdapter {

    
private  Context ctx;
    
private   int  drawableIDs[];
    
private   int  stringIDs[];

    
public  MyAdapter(Context ctx,  int  DrawableIDs[],  int  StringIDs[])
    {
        
this .ctx  =  ctx;
        
this .drawableIDs  =  DrawableIDs;
        
this .stringIDs  =  StringIDs;
    }

    
public   int  getCount() {
        
//  TODO Auto-generated method stub
         return  drawableIDs.length ; 
    }

    
public  Object getItem( int  position) {
        
//  TODO Auto-generated method stub
         return  drawableIDs [position]; 
    }

    
public   long  getItemId( int  position) {
        
//  TODO Auto-generated method stub
         return  position;
    }

    
public  View getView( int  position, View convertView, ViewGroup parent) {
        
//  TODO Auto-generated method stub
        LinearLayout ll  =   new  LinearLayout( ctx ); 
        ll.setOrientation(LinearLayout. HORIZONTAL ); 
        ll.setGravity(Gravity. CENTER_VERTICAL ); 
        ImageView iv 
=   new  ImageView( ctx ); 
        iv.setImageResource( drawableIDs [position]); 
        iv.setLayoutParams( 
new  ViewGroup.LayoutParams( 100 40 )); 
        ll.addView(iv);                     
        TextView tv 
=   new  TextView( ctx ); 
        tv.setText( stringIDs [position]); 
        tv.setTextSize(
14 ); 
        tv.setTextColor(Color.BLUE ); 
        ll.addView(tv); 
        
return  ll; 
    }
}


修改initMySpinner方法:

private   void  initMySpinner() {
        
int [] phonePics  =  {R.drawable.apple,R.drawable.android,R.drawable.blackberry};
        
int [] phones  =  {   R.string.iphone, R.string.android,  R.string.blackberry};
        
        MyAdapter adapter 
=   new  MyAdapter( this ,phonePics,phones);
        spinner.setAdapter(adapter);
        spinner.setPrompt(
" test " );
        spinner.setSelection(
0 true );
    }

运行结果截图:


OK,但使用自定义的Adapter,我们如何来获取选中的文本信息呢?
在MyAdapter中,修改getView方法,添加黄色区域代码如下:

public  View getView( int  position, View convertView, ViewGroup parent) {
        
//  TODO Auto-generated method stub
        LinearLayout ll  =   new  LinearLayout( ctx ); 
        ll.setOrientation(LinearLayout. HORIZONTAL ); 
        ll.setGravity(Gravity. CENTER_VERTICAL ); 
        ImageView iv 
=   new  ImageView( ctx ); 
        iv.setImageResource( drawableIDs [position]); 
        iv.setLayoutParams( 
new  ViewGroup.LayoutParams( 100 40 )); 
        ll.addView(iv);                     
        TextView tv 
=   new  TextView( ctx ); 
        tv.setText( stringIDs [position]); 
        tv.setTextSize(
14 ); 
        tv.setTextColor(Color.BLUE ); 
        
tv.setTag(  " tagTextView "  );        
        ll.addView(tv);

        return
 ll; 
    }


重写事件中的onItemSelected方法:

//  TODO Auto-generated method stub
         public   void  onItemSelected(AdapterView <?>  adapterView, View view,  int  position,
                
long  id) {
            
if (adapterView.getId()  ==  R.id.mySpinner)
            {
                LinearLayout ll 
=  (LinearLayout)view; 
                TextView tv 
=  (TextView)ll.findViewWithTag(  " tagTextView "  ); 
                String str 
=  (String)tv.getText(); 
                System.out.println(
" selected===========> "   +  str);
            }
        }


最后,别忘了注册该事件。=。=

 

 

转自:http://www.blogjava.net/crazycoding/archive/2011/07/09/353981.html

分享到:
评论

相关推荐

    Spinner的基本使用

    本教程将深入探讨Spinner的基本使用方法,包括通过数组和XML数据源设置Spinner,以及不同样式的实现。 首先,我们从最基础的`Day04_Spinner01`开始。在这个示例中,我们将直接在Java代码中创建Spinner并设置其数据...

    Android Spinner 控件的使用

    总结起来,Android Spinner控件是构建交互式用户界面的重要组件,它提供了一种简洁高效的方式供用户选择数据。通过理解其基本用法、自定义适配器和事件监听,开发者可以灵活地满足各种应用场景的需求。在实际项目中...

    案例九(下拉选择spinner的使用

    在本案例中,我们将深入探讨Spinner的使用方法,包括如何创建、设置数据源、监听用户选择以及自定义样式。 首先,Spinner的创建通常在布局XML文件中完成。在`res/layout`目录下,打开或创建一个XML布局文件,添加...

    Spinner

    总结来说,Spinner是Android中实现下拉选择功能的重要控件,其使用涉及到布局文件的配置、适配器的创建和设置、监听器的绑定,以及可能的数据源交互。理解并熟练掌握这些知识点,能帮助开发者构建更加丰富的用户交互...

    使用Spinner实现下拉列表

    在Android开发中,Spinner是一...总结来说,Android Spinner是一个便捷的下拉选择组件,通过适配器填充数据并设置自定义布局,可以实现丰富的交互效果。在实际开发中,可以根据项目需求灵活运用,提高应用的用户体验。

    Android spinner 案例

    总结,Android Spinner是一个实用的组件,可以方便地在有限的选项中进行选择。通过理解其基本原理和API,开发者可以轻松地将其集成到自己的应用中,提高用户体验。同时,自定义功能允许开发者根据应用需求定制...

    android 下拉菜单Spinner 几种使用

    本篇文章将详细介绍Android Spinner的几种使用方法。 首先,我们来了解一下Spinner的基本结构。Spinner继承自AbsSpinner,是AdapterView的一个子类。它通过Adapter来加载数据,并显示当前选中的项。Adapter可以是...

    Xamarin.Android Spinner

    总结,Xamarin.Android的Spinner组件提供了便捷的下拉选择功能,结合Adapter和事件监听,开发者可以轻松地实现丰富的交互式界面。通过自定义布局和优化性能,我们可以创建出符合用户需求的高效应用。理解并熟练运用...

    Spinner显示城市信息

    总结起来,这个“Spinner显示城市信息”的案例涉及了Android的UI组件使用、数据适配、事件监听以及数据加载策略等多个知识点,是Android开发中常见的功能实现。通过这种方式,我们可以为用户提供直观且交互性强的...

    SpinnerDemo_java_spinner_

    总结一下,这个"SpinnerDemo"项目展示了如何在Android应用中使用Spinner控件,包括设置选项、监听选择事件以及可能的自定义样式和动画效果。对于初学者来说,这是一个很好的学习Android UI交互和控件使用的实例。...

    简单的自定义Spinner

    在Android开发过程中,经常需要使用到`Spinner`这一控件来提供用户选择的功能。然而,默认的`Spinner`样式可能无法满足设计师或者产品经理对UI的要求。因此,学会如何自定义一个美观且实用的`Spinner`就显得尤为重要...

    实现android Spinner选择后被选中的item有个背景的功能

    总结来说,实现Android Spinner选择后有背景效果的关键步骤包括: 1. 创建Spinner并设置适配器。 2. 设计自定义的Item布局,包含背景资源。 3. 实现OnItemSelectedListener监听选择事件,设置选中项的背景。 通过...

    Android spinner

    总结以上步骤,可以得出Android spinner的基本使用流程如下: - 在布局文件中声明spinner组件,并设置相应的属性。 - 在string.xml中定义spinner的选项数据。 - 创建ArrayAdapter对象,并通过createFromResource或...

    android 自定义spinner popupWindow

    在Android开发中,...总结起来,自定义Android Spinner与PopupWindow结合,不仅可以提高界面的美观度,还能提供更好的用户体验。通过灵活地调整样式和功能,开发者可以根据应用的具体需求创建独特的下拉选择组件。

    extjs的spinner

    根据提供的代码片段,我们可以了解到 `Spinner` 的基本定义和使用方法。首先,我们需要了解 `Ext.form.field.Spinner` 类的基础属性和方法。 ##### 2.1 定义一个自定义 Spinner ```javascript Ext.define('Ext.ux....

    android 用Button+dialog实现spinner

    总结来说,"android 用Button+dialog实现spinner"是通过将Spinner放入Dialog中,并通过Button来触发Dialog显示,从而实现自定义的下拉选择效果。这种方法增加了用户体验的灵活性,同时也让开发者能够更好地控制和...

    spinner 动态匹配

    首先,我们需要了解Spinner的基本使用。在XML布局文件中,Spinner可以通过`&lt;Spinner&gt;`标签添加,然后通过`android:entries`属性指定其选项列表,这些选项通常来自一个数组资源或者SQLite数据库。例如: ```xml ...

    Android Spinner实现图片列表

    总结,这个“Android Spinner实现图片列表”的示例提供了一种方法,使Spinner能够以更直观、更具吸引力的方式展示选项,这对于提升用户界面的交互性和美观度非常有价值。通过学习和理解这个示例,开发者可以将这种...

    Android Spinner

    总结,Android Spinner控件是Android UI设计中一个重要的组件,用于提供单选下拉列表功能。理解并熟练掌握Spinner的使用,能帮助开发者创建更加友好、高效的用户界面。在实际项目中,开发者应根据具体需求灵活运用...

    ink-spinner适用于Ink的圆形加载Spinner组件

    总结来说,ink-spinner是Ink库中一个实用的加载组件,它提供了丰富的动画效果和高度的可定制性,使得在命令行应用中创建交互式的加载提示变得更加容易。通过合理运用ink-spinner,开发者可以提升CLI应用的用户体验,...

Global site tag (gtag.js) - Google Analytics