Spinner 使用方法小结
16lz
2021-01-24
android里的Spinner其实就是个ComboBox =。=
一。基本使用方法:
main.xml 不多解释
< 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”定义数据源。
<? xmlversion="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;
/**
*SpinnerDemo
* @author Yinger
*@time2011-7-9下午01:54:59
*@mailmelody.crazycoding@gmail.com
*/
public class SpinnerDemo extends Activity{
Spinnerspinner = null ;
Stringselected = " 0 " ;
/** Calledwhentheactivityisfirstcreated. */
@Override
public void onCreate(BundlesavedInstanceState){
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,Viewview, int position,
long id){
// TODOAuto-generatedmethodstub
selected = adapterView.getItemAtPosition(position).toString();
System.out.println( " selected===========> " + selected);
}
public void onNothingSelected(AdapterView <?> arg0){
// TODOAuto-generatedmethodstub
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:
<? xmlversion="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
*@time2011-7-9下午03:39:34
*@mailmelody.crazycoding@gmail.com
*/
public class MyAdapter extends BaseAdapter{
private Contextctx;
private int drawableIDs[];
private int stringIDs[];
public MyAdapter(Contextctx, int DrawableIDs[], int StringIDs[])
{
this .ctx = ctx;
this .drawableIDs = DrawableIDs;
this .stringIDs = StringIDs;
}
public int getCount(){
// TODOAuto-generatedmethodstub
return drawableIDs.length;
}
public ObjectgetItem( int position){
// TODOAuto-generatedmethodstub
return drawableIDs[position];
}
public long getItemId( int position){
// TODOAuto-generatedmethodstub
return position;
}
public ViewgetView( int position,ViewconvertView,ViewGroupparent){
// TODOAuto-generatedmethodstub
LinearLayoutll = new LinearLayout(ctx);
ll.setOrientation(LinearLayout.HORIZONTAL);
ll.setGravity(Gravity.CENTER_VERTICAL);
ImageViewiv = new ImageView(ctx);
iv.setImageResource(drawableIDs[position]);
iv.setLayoutParams( new ViewGroup.LayoutParams( 100 , 40 ));
ll.addView(iv);
TextViewtv = 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};
MyAdapteradapter = new MyAdapter( this ,phonePics,phones);
spinner.setAdapter(adapter);
spinner.setPrompt( " test " );
spinner.setSelection( 0 , true );
} 运行结果截图:
OK,但使用自定义的Adapter,我们如何来获取选中的文本信息呢?
在MyAdapter中,修改getView方法,添加黄色区域代码如下:
public ViewgetView( int position,ViewconvertView,ViewGroupparent){
// TODOAuto-generatedmethodstub
LinearLayoutll = new LinearLayout(ctx);
ll.setOrientation(LinearLayout.HORIZONTAL);
ll.setGravity(Gravity.CENTER_VERTICAL);
ImageViewiv = new ImageView(ctx);
iv.setImageResource(drawableIDs[position]);
iv.setLayoutParams( new ViewGroup.LayoutParams( 100 , 40 ));
ll.addView(iv);
TextViewtv = new TextView(ctx);
tv.setText(stringIDs[position]);
tv.setTextSize( 14 );
tv.setTextColor(Color.BLUE);
tv.setTag( " tagTextView " );
ll.addView(tv);
return ll;
}
重写事件中的onItemSelected方法:
// TODOAuto-generatedmethodstub
public void onItemSelected(AdapterView <?> adapterView,Viewview, int position,
long id){
if (adapterView.getId() == R.id.mySpinner)
{
LinearLayoutll = (LinearLayout)view;
TextViewtv = (TextView)ll.findViewWithTag( " tagTextView " );
Stringstr = (String)tv.getText();
System.out.println( " selected===========> " + str);
}
}
最后,别忘了注册该事件。=。=
更多相关文章
- 【ClassNotFoundExcept】Android应用程序启动时发生AndroidRunti
- Android(安卓)Device Monitor 报 open failed: Permission denie
- Android中利用画图类和线程画出闪烁的心形
- Android-中常用方法集锦
- Android(安卓)首选网络模式默认值的修改方法
- android 中如何限制 EditText 最大输入字符数(2)
- Android(安卓)Studio 快捷键(转)
- android 屏幕保持唤醒 不锁屏
- Android下使用activation发送邮件