在项目中,用到了需要特殊样式的下拉菜单,索性就对下拉菜单总结了一下,希望对大家有用。
转载请注明出处: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