Android 实现自定义Spinner

有时候因为项目的界面风格 很多控件如果使用原生的样式感觉会与整体风格有些不搭 所以需要自定义样式 很多项目中自定义控件都是必不可少的 这里参考网上的一些资料 实现了一个自定义Spinner  记录下 加深印象

效果图:

       技术分享

 

 

     技术分享

 

       弹框是通过一个重写的Dialog和Listview实现

      第一步   重写Dialog类SelectDialog.java

      

[java] copy
 

import import import public SelectDialog  AlertDialog {  

  •   
  •  SelectDialog(Context context,  theme) {  
  •         (context, theme);  
  •  SelectDialog(Context context) {  
  •         (context);  
  •   
  •       onCreate(Bundle savedInstanceState) {  
  • .onCreate(savedInstanceState);  
  •           
  • }  


 第二步重写Spinner类CustomerSpinner.java

 

[java] copy
 

import import import import import import import import import public CustomerSpinner  Spinner  OnItemClickListener {  

  •   
  •   SelectDialog dialog = ;  
  •      ArrayList<String> list;  
  •   String text;  
  •   
  •  CustomerSpinner(Context context, AttributeSet attrs) {  
  •         (context, attrs);  
  •   
  •   
  •       performClick() {  
  •  LayoutInflater inflater = LayoutInflater.from(getContext());  
  •  View view = inflater.inflate(R.layout.formcustomspinner, );  
  •          ListView listview = (ListView) view  
  •  ListviewAdapter(context, getList());  
  • );  
  •  SelectDialog(context, R.style.dialog);  
  •         LayoutParams params =  LayoutParams(, LayoutParams.FILL_PARENT);  
  • );  
  •         dialog.show();  
  •  ;  
  •   
  •       onItemClick(AdapterView<?> view, View itemView,  position,  
  •  id) {  
  •         setSelection(position);  
  •  (dialog != ) {  
  • ;  
  •  ArrayList<String> getList() {  
  •  list;  
  •     }  
  •   setList(ArrayList<String> list) {  
  • .list = list;  
  •     }  
  •  String getText() {  
  •  text;  
  •     }  
  •   setText(String text) {  
  • .text = text;  
  •     }  
  • }  

这里用Listview来显示数据 ArrayList<String> list存储所要显示的数据 text存储每次spinner选中的值 在监听spinner并获取当前选中的值的时候用到

dialog的样式设置:styles.xml

 

[html] copy
 

<? = =?> <>  = =>  =></>  

  •  =></>  
  •          =></>  
  •  =></>  
  •          =></>  
  •     > </>  


Listview的代码很简单 自己写一个adapter就好了

第三步 在xml文件中引用自定义的spinner

main.xml

[html] copy
 

<? = =?> < =  

  • = =  
  •     = = =  
  •   
  •      = =  
  • == =  
  •         =/>  =  
  •         = = =  
  • =/> </>  


到这里差不多就完成了 不过这个还有个缺陷 每次使用时通过 spinner.setList(list);为其加载数据 当程序返回或者退出这个节目在进入时 listview中的数据会重复 这里只能通过这个办法来解决了

[html] copy
 

@Override  

  • public boolean onKeyDown(int keyCode, KeyEvent event) {  
  •  == KeyEvent.KEYCODE_BACK){  
  •         list.clear();  
  • }  


每次返回或退出时 清空list 就可以啦


 

 下载地址:http://download.csdn.net/download/wanglj0925/4634852

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。