Spinner 使用方法小结——添加图片

转载 2012年03月29日 19:36:53

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

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.
自定义SpinnerLayout,替换掉体统默认的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);
            }
        }


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


相关文章推荐

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Spinner下拉列表(列表项带有图片和文字)

//Spinner下拉列表(可以自定义列表项的样式,可带有图片和文字得搭配使用) public class MainActivity extends Activity { private Spin...

android中的spinner显示为图片列表

项目结构:   实现的效果:   layout的主要配置文件activity_main.xml:

android的Spinner控件的自定义样式设置以及ArrayAdapter的使用

今天又重新学习了Spinner的使用,之前只是知道,不知道该怎么控制Spinner没有下拉表时的样式和下拉表中的样式。今天又仔细研究了一下,更加明白了。 显然是不一样的,这是怎么做到的呢。 0: ...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

使得spinner和spinner中item有不同的背景图片-------自定义spinner,设计出你想要的spinner!

时间:2015-04-21 20:37:13      阅读:326      评论:0      收藏:0      [点我收藏+] 标签: 遇到问题描述: spinner样式的使用,...

Android自定义spinner下拉框实现的实现

说道android下拉框spineer,框架中虽有现成的控件,但实际效果可能并不是我们所需要的那种,如下图: 其实我们更需要的是像WEB那种风格,如图所示: 其实实现也很简...
  • jdsjlzx
  • jdsjlzx
  • 2014年11月20日 17:21
  • 58327

安卓中Spinner换图表样式

i.我们在按照UI画的图修改一些界面的时候,有的时候会涉及到Spinner换图标样式的这种情况。刚开始接触肯定是比较坑的,首先说的是Spinner的background如果直接替换图标的话,肯定不是你...

动态添加/删除Spinner列表选项框

在之前的UI组件大全中我们已经介绍过着Spinner了,这里的话我们实现动态地添加/删除Spinner 添加列表项的话用adapter.add(String) 删除列表项的话用adapter.re...

Spinner 使用方法小结

android里的Spinner其实就是个ComboBox =。= 一。基本使用方法: main.xml 不多解释 xml version="1.0" encoding="utf-8"?> ...
  • wzxisme
  • wzxisme
  • 2014年06月20日 17:12
  • 5222
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spinner 使用方法小结——添加图片
举报原因:
原因补充:

(最多只允许输入30个字)