下拉菜单 spinner ,popupwindow, 自定义popupwindow总结

下拉菜单实现方法
本文介绍了两种下拉菜单实现方式:spinner和popupwindow。spinner作为控件使用较为简便,适用于简单场景;popupwindow则更为灵活,但需要在代码中生成并自定义布局。文章详细展示了如何使用这两种方式创建下拉菜单。

在项目中,用到了需要特殊样式的下拉菜单,索性就对下拉菜单总结了一下,希望对大家有用。

转载请注明出处:http://blog.youkuaiyun.com/daogepiqian/article/details/49582409

下拉菜单有两种,spinner和popupwindow,这两种的区别在于spinner是以控件的方式存在,通过在布局中添加,简单使用,通常想dialog一样显示。而popupwindow需要在代码中生成,并且需要写一个布局来展示菜单列表的内容,通常都是listview,这种方式,虽然麻烦,但是比较灵活。通常一些自定义的下拉菜单都是用自定义popupwindow做的。

废话不多说,直接主题!

       spinner用法: 

            首先,在布局中添加spinner

         <Spinner
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/spinner2"
    android:entries="@array/spingarr"
     />

     在java文件中

      spinner = (Spinner) findViewById(R.id.spinner2);

       data_list = new ArrayList<String>();
        data_list.add("111");
        data_list.add("222");

      arr_adapter= new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, data_list);
       arr_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
       spinner.setAdapter(arr_adapter);

怎么样,简单吧,注意:通长见到的下拉列表都是带下拉箭头的,只需要把spinner换个背景就可以了, android:background="@drawable/ic_arrow_blue_bottom",不过需要自己切图。

转载请注明出处:http://blog.youkuaiyun.com/daogepiqian/article/details/49582409

eg:http://download.youkuaiyun.com/detail/daogepiqian/9232637

         popupwindow

        首先,popupwindowTime = new PopupWindow(customVieRight, LayoutParams.MATCH_PARENT,  LayoutParams.WRAP_CONTENT, true);

        其次,对popupwindow的属性进行设置,popupwindowTime.showAsDropDown(v);或popupwindowTime.showAtLocation(parent, gravity, x, y)表示popupwindow显示的位置。

       popupwindow在显示的时候,如果想要点击其他地方,让popupwindow自动收回列表,就需要如下两个设置:

popupwindowTime.setOutsideTouchable(true);popupwindowTime.setBackgroundDrawable(new BitmapDrawable());  否者popupwindow只有点击下拉列表才会收回列表。

想要对popupwindow这是动画效果,popupwindowState.setAnimationStyle(R.style.AnimationPreview);就可以。一般都是通过伸缩动画来显示和关闭popupwindow。

   剩下的工作就是列表的内容:

ListView listStateView = (ListView) customVieLeft.findViewById(R.id.listView_select_left);
  
  adapter = new ExtraReserveAdapter(this, listState);
  listStateView.setAdapter(adapter);
  listStateView.setOnItemClickListener(new OnItemClickListener(){

   @Override
   public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
     long arg3) {
    // TODO Auto-generated method stub
    extra_reserve_state.setText(adapter.list.get(arg2));
    popupwindowState.dismiss();
   }
   
  });

自己写adapter和布局。

转载请注明出处:http://blog.youkuaiyun.com/daogepiqian/article/details/49582409

eg:http://download.youkuaiyun.com/detail/daogepiqian/9232649

自定义popupwindow

    其实,所谓自定义也就是对popupwindow的属性进行了封装,长宽,ListView,背景,动画等。使用起来只要引用就可以,不再需要每次都设置。

切记,popupwindow只能在代码中生成。

如下:

public class SpinerPopWindow extends PopupWindow implements OnItemClickListener{

 private Context mContext;
 private ListView mListView;
 private NormalSpinerAdapter mAdapter;
 private IOnItemSelectListener mItemSelectListener;
 
 
 public SpinerPopWindow(Context context)
 {
  super(context);
  
  mContext = context;
  

  init();
 }
 
 
 public void setItemListener(IOnItemSelectListener listener){
  mItemSelectListener = listener;
 }

 
 private void init()
 {
  View view = LayoutInflater.from(mContext).inflate(R.layout.spiner_window_layout, null);
  setContentView(view);  
  setWidth(LayoutParams.WRAP_CONTENT);
  setHeight(LayoutParams.WRAP_CONTENT);
  
  setFocusable(true);
     ColorDrawable dw = new ColorDrawable(0x00);
  setBackgroundDrawable(dw);
  
  
  mListView = (ListView) view.findViewById(R.id.listview);
  

  mAdapter = new NormalSpinerAdapter(mContext); 
  mListView.setAdapter(mAdapter); 
  mListView.setOnItemClickListener(this);
  
   // 设置SelectPicPopupWindow弹出窗体动画效果 
   this.setAnimationStyle(R.style.AnimationPreview); 
 }
 
 
 public void refreshData(List<String> list, int selIndex)
 {
  if (list != null && selIndex  != -1)
  {
   mAdapter.refreshData(list, selIndex);
  }
 }


 @Override
 public void onItemClick(AdapterView<?> arg0, View view, int pos, long arg3) {
  dismiss();
  if (mItemSelectListener != null){
   mItemSelectListener.onItemClick(pos);
  }
 }


 
}

使用的时候就简单了,如下:

private SpinerPopWindow mSpinerPopWindow;
 private void showSpinWindow(){
  mSpinerPopWindow.setWidth(mTView.getWidth());
  mSpinerPopWindow.showAsDropDown(mTView);
 }

转载请注明出处:http://blog.youkuaiyun.com/daogepiqian/article/details/49582409

eg:http://download.youkuaiyun.com/detail/daogepiqian/9232655

当然,这种下拉菜单也可以通过自定义linerlayout来进行,方法还有很多,大家一同学习吧!!!

转载请注明出处:http://blog.youkuaiyun.com/daogepiqian/article/details/49582409




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值