zoukankan      html  css  js  c++  java
  • android 高级组件之Spinner

    spinner 其实就是一个列表选择框,不过android的列表选择框并不是需要显示下拉列表的,
    相当于弹出一个菜单供用户选择。

    spinner 是ViewGrop的一个间接子类,因此他可以充当容器。

    先介绍一下apinner 的两个常用属性.

       android:prompt 设置该列表选择框的提示信息

       android:entries 使用数组资源设置该下拉列表框的列表项目。

    第一步,定义需要显示的数据。

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="app_name">spanner</string>   
             <string name="book">选择书籍</string>
    	 <string-array name="books">
    		 <item >java 学习笔记</item>
    		 <item >J2EE 学习笔记</item>
    		 <item >android 学习笔记</item>
    	 </string-array>
    </resources>
    

    第二步.定义一个Spinner 把数据展示出来。

    <?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:layout_width="fill_parent" 		
    		android:layout_height="wrap_content"
    		android:entries="@array/books"
    		android:prompt="@string/book"
    	/>
    	
    </LinearLayout>
    

    效果图:



    以上的效果,没有写任何代码,但通常做开发中并不是这么做的。而是用代码来实现的效果。

    package android.basic.lesson10;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemSelectedListener;
    import android.widget.ArrayAdapter;
    import android.widget.Spinner;
    import android.widget.Toast;
    
    public class MainHelloSpinner extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            //找到Xml中定义的下拉列表
            Spinner spinner = (Spinner)findViewById(R.id.spinner);
            //准备一个数组适配器
            ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                    this, R.array.colors, android.R.layout.simple_spinner_item);
            //设置下拉样式
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            //为下拉列表设置适配器
            spinner.setAdapter(adapter);
    
            //定义子元素选择监听器
            OnItemSelectedListener oisl=  new OnItemSelectedListener() {
    			@Override
    			public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {
    	              Toast.makeText(MainHelloSpinner.this,"选择的色彩: " +
                      parent.getItemAtPosition(position).toString(), Toast.LENGTH_LONG).show();
    			}
    			@Override
    			public void onNothingSelected(AdapterView<?> parent) {			
    			}
            };
            //为下拉列表绑定事件监听器
            spinner.setOnItemSelectedListener(oisl);
        }
    }

    效果图:

    Spinner在项目中的应用。场景,spinner中的数据是从数据库中提取出来的,也就是一个list。这个时候我们就需要重写BaseAdapter了。代码如下:

     //下拉表监听方法
        public void SpinnerListener(final List<String> list) 
        {
        	Spinner setspinner=(Spinner)this.findViewById(R.id.mySpinner);
        	BaseAdapter ba=new BaseAdapter()
            {
        		List<String> result=list;
    			@Override
    			public int getCount() 
    			{
    				return result.size();
    			}
    			@Override
    			public Object getItem(int arg0) 
    			{ 
    				return null;
    			}
    			@Override
    			public long getItemId(int arg0) 
    			{ 
    				return 0; 
    			}
    			@Override
    			public View getView(int arg0, View arg1, ViewGroup arg2) 
    			{
    				LinearLayout ll=new LinearLayout(MainActivity.this);
    				ll.setOrientation(LinearLayout.VERTICAL);		//设置朝向	
    				TextView tv=new TextView(MainActivity.this);
    				tv.setText(result.get(arg0));
    				tv.setTextSize(18);//设置字体大小
    				tv.setTextColor(R.color.black);//设置字体颜色
    				ll.addView(tv);//添加到LinearLayout中
    				 
    				return ll;
    			}        	
            };
            
            setspinner.setAdapter(ba);//为Spinner设置内容适配器
            
            setspinner.setOnItemSelectedListener   //设置选项选中的监听器
            (
               new OnItemSelectedListener()
               {
            	    @Override
       				public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) 
            	    {
    	   				LinearLayout ll=(LinearLayout)arg1;//获取当前选中选项对应的LinearLayout
    	   				TextView tvn=(TextView)ll.getChildAt(0);//获取其中的TextView 
    	   				String Isource=(String) tvn.getText();
    	   				System.out.println("Isource:"+Isource);
            	    }
            	    
            	    @Override
            	    public void onNothingSelected(AdapterView<?> arg0) { }        	   
               }
            );
        }



    使用的时候:

     List<String> rolors = new ArrayList<String>();
            rolors.add("红色");
            rolors.add("白色");
            SpinnerListener(rolors);

    效果图:





  • 相关阅读:
    数组中出现次数超过一半的数字
    Trie字典树算法
    字符串匹配算法 之 基于DFA(确定性有限自动机)
    实现栈最小元素的min函数
    有关有环链表的问题
    浅谈C中的malloc和free
    undefined reference to 'pthread_create'问题解决
    用两个栈实现队列
    resf规范
    单例模式
  • 原文地址:https://www.cnblogs.com/java20130726/p/3218347.html
Copyright © 2011-2022 走看看