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

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

转载请注明出处:http://blog.csdn.net/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.csdn.net/daogepiqian/article/details/49582409

eg:http://download.csdn.net/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.csdn.net/daogepiqian/article/details/49582409

eg:http://download.csdn.net/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.csdn.net/daogepiqian/article/details/49582409

eg:http://download.csdn.net/detail/daogepiqian/9232655

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

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




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spinner (下拉列表) 是一种常见的控件,用于显示可选项列表并允许用户从中选择一个选项。Spinner 默认的样式是系统定义的,但我们可以通过自定义来改变其外观和交互方式。 首先,我们可以通过定义一个新的样式来改变 Spinner 的外观。我们可以使用 XML 文件来定义新的样式,例如: ``` <style name="CustomSpinnerStyle" parent="@android:style/Widget.Spinner"> <item name="android:background">@drawable/custom_spinner_background</item> <item name="android:paddingLeft">8dp</item> <item name="android:paddingRight">8dp</item> </style> ``` 在这个样式中,我们指定了一个自定义的背景和左右的内边距。你可以根据自己的需求来定义其他属性,如文本颜色、字体大小等。 接下来,我们需要将定义的样式应用到 Spinner 控件上。我们可以在布局文件中使用 `style` 属性来指定样式: ``` <Spinner android:id="@+id/spinner" android:layout_width="wrap_content" android:layout_height="wrap_content" style="@style/CustomSpinnerStyle" /> ``` 通过这样的设置,Spinner 将会应用我们定义的自定义样式。 除了外观,我们还可以自定义 Spinner 的行为和交互方式。例如,我们可以使用 `setOnItemSelectedListener` 来监听用户选择的事件: ``` Spinner spinner = findViewById(R.id.spinner); spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { String selectedOption = parent.getItemAtPosition(position).toString(); Toast.makeText(getApplicationContext(), "你选择了:" + selectedOption, Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); ``` 通过这个监听器,我们可以在用户选择一个选项时触发自定义的操作,比如显示一个 Toast 提示用户选择的选项。 通过上述方式,我们可以自定义 Spinner 的外观和行为,使其更符合我们应用的需求。当然,还有其他更多的方式可以对 Spinner 进行自定义,这里只是简单介绍了一些常见的方法。希望对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值