android spinner(下拉选项卡)的使用

用法 1 :以资源方式,静态展示 Spinner 选项

1.     在资源文件 (strings.xml) 中,增加:

         < string name = "spin_prompt" > 请选择城市 </ string >

         < string-array name = "cities" >

                   < item > 北京 </ item >

                   < item > 上海 </ item >

                   < item > 南京 </ item >

                   < item > 乌鲁木齐 </ item >
         </ string-array >

2.     在布局文件 (main.xml) 中,增加:

         < Spinner

                   android:id = "@+id/Spinner01"

                   android:layout_width = "wrap_content"

                   android:layout_height = "wrap_content"

                   android:entries = "@array/cities"

                   android:prompt = "@string/spin_prompt"

         />

 注意: android:prompt 必须要引用 strings.xml 中资源 ID ,而不能在这里直接用 raw text 。

         运行结果:



点击Spinner右边的带倒三角的按钮,即出现各城市选项如下:




  用法 2 :以代码方式,动态展示 Spinner 选项

1.     在资源文件 strings.xml 中,无需定义任何资源。

2.     在布局文件 (main.xml) 中, Spinner 的描述为:

         < Spinner

                   android:id = "@+id/Spinner01"

                   android:layout_width = "wrap_content"

                  android:layout_height = "wrap_content"

         />

3.     在 Activity 对应的代码中做相关修改,使之如下:

public class ControlSpinner extends Activity

{

                   private static final String tag = "ControlSpinner" ;

                   private static final String[] cities =

                            { " 上海 " , " 北京 " , " 南京 " , " 哈尔滨 " , " 乌鲁木齐 " , " 符拉迪沃斯托克 " , " 圣弗朗西斯科 " };
 
               private Spinner spinner ;

               @Override

               public void onCreate(Bundle savedInstanceState)

               {

                    super .onCreate(savedInstanceState);

                    setContentView(R.layout. main );

 

                    ArrayAdapter<String> adapter = new ArrayAdapter<String>( this , android.R.layout. simple_spinner_item , cities );

                    adapter.setDropDownViewResource(android.R.layout. simple_spinner_dropdown_item );
 
                    spinner = (Spinner) this .findViewById(R.id. Spinner01 );

           spinner .setAdapter(adapter);

                    spinner .setPrompt( " 请选择城市 : " );

               }

                   … …

         }

         运行效果和用法 1 相同。



                                                           用法 4 :改变 Spinner 对象本身的大小,及其文字的大小和颜色

1.     在布局文件 (main.xml) 中,修改 Spinner 对象的描述如下:

         < Spinner

                   android:id = "@+id/Spinner01"

                   android:layout_width = "160px"

                   android:layout_height = "40px"

         />

这使得 Spinner01 的宽度为 160 个像素,高度为 40 个像素。

2.     创建一个布局文件 spinnerLayout.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 = "12sp"         

               android:textColor = "#FF8B1500"

               android:gravity = "center"

         />

3.     在 Activity 对应的代码中做相关修改,使之如下:

public class ControlSpinner extends Activity

{

               private Spinner spinner ;

    @Override

               public void onCreate(Bundle savedInstanceState)

               {

                    super .onCreate(savedInstanceState);

                    setContentView(R.layout. main );

 

                    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource ( this ,

                             R.array. cities ,

                             R.layout. spinnerlayout );                                                                     // 改为 spinnerlayout
 
                    adapter.setDropDownViewResource(R.layout. spinnerlayout );           // 改为 spinnerlayout
 
                    spinner = (Spinner) this .findViewById(R.id. Spinner01 );

                    spinner .setAdapter(adapter);

                    spinner .setPrompt( " 请选择城市 : " );

               }

                   … …

         }


                                 
            用法
5:同时显示图片和文本

假定有澳大利亚、瑞士、中华人民共和国和美利坚合众国这4个国家,我们想把它们的国旗和它们的国名同时显示在Spinner中。

它们对应的国旗图片资源分别如下:


对应的图片文件名分别为: au.png, ch.png, cn.png 和 us.png 。

1.     首先把国旗图片拖入 res/drawable-mdpi 文件夹。系统会自动为我们在 R.java 中生成相应的 id 。情形如下:

    public static final class drawable {

        public static final int au=0x7f020000;

        public static final int ch=0x7f020001;

        public static final int cn=0x7f020002;

        public static final int icon=0x7f020004;       // 系统自带的 icon 图标

        public static final int us=0x7f020005;

    }

 

2.     在 strings.xml 中给出各个国家的国名。

         < string name = "au" > 澳大利亚 </ string >

         < string name = "ch" > 瑞士 </ string >

         < string name = "cn" > 中华人民共和国 </ string >

         < string name = "us" > 美利坚合众国 </ string >

 

保存后,系统也会自动为我们在 R.java 中生成相应的 id 。情形如下:

    public static final class string {

        public static final int app_name=0x7f040001;              // 系统自带的 string
 
        public static final int au=0x7f040002;

        public static final int ch=0x7f040003;

        public static final int cn=0x7f040004;

        public static final int us=0x7f040006;

    }

 

3.     假定在布局文件 (main.xml) 中, Spinner01 的属性如下:

         < Spinner

                   android:id = "@+id/Spinner01"

                   android:layout_width = "300px"

                   android:layout_height = "48px"

/>


4.     在 Activity 对应的代码中做相关修改,使之如下:

public class ControlSpinner extends Activity
{
               private Spinner spinner ;
                // 国旗图片 ID 数组
               private int [] drawableIDs = {
                        R.drawable. au ,
                        R.drawable. ch ,
                        R.drawable. cn ,
                        R.drawable. us
               };
 
                   // 国名文字 ID 数组
               private int [] nameIDs = {
                        R.string. au ,
                        R.string. ch ,
                        R.string. cn ,
                        R.string. us
               };
   
                   // 自定义一个 Adapter ,要重写 getCount 、 getItem 、 getItemId 和 getView 方法。其中的 getView 方法最为重要。
 
                   // 当然也可以先独立定义一个 Adapter 类
               private BaseAdapter customizedAdapter = new BaseAdapter()
               {
                            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
                                     LinearLayout ll = new LinearLayout(ControlSpinner. this );
 
                                     // 使 ll 的 Orientation 为 HORIZONTAL
                                     ll.setOrientation(LinearLayout. HORIZONTAL );
 
                                     // 在垂直方向居中
                                     ll.setGravity(Gravity. CENTER_VERTICAL );
                           
                                     // 创建一个 ImageView 对象
                                     ImageView iv = new ImageView(ControlSpinner. this );
 
                                     // 指定对应 position 的 Image
                                     iv.setImageResource( drawableIDs [position]);
 
                                     // 设定 ImageView 对象 iv 的宽度为 100 像素,高度为 40 像素
 
                                     iv.setLayoutParams( new ViewGroup.LayoutParams(100, 40));
 
                                     // 将 iv 加入到 ll
                                     ll.addView(iv);                    
                           
                                     // 创建一个 TextView 对象
                                     TextView tv = new TextView(ControlSpinner. this );
 
                                     // 指定对应 position 的 Text
                                     tv.setText( nameIDs [position]);
                                     // 设定文字大小
                                     tv.setTextSize(14);
                                     // 设定文字颜色
                                     tv.setTextColor(Color. BLUE );
                                     // 将 tv 加入到 ll
                                     ll.addView(tv);
                           
                                     return ll;
                            }
                  };
                  
               @Override
               public void onCreate(Bundle savedInstanceState)
               {
                    super .onCreate(savedInstanceState);
                    setContentView(R.layout. main );
 
                    spinner = (Spinner) this .findViewById(R.id. Spinner01 );
                    spinner .setAdapter( customizedAdapter );
                    spinner .setPrompt( " 请选择国家: " );
               }
                   … …
         }

  运行结果如下:



  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值