在指定的控件底下实现下拉框,就像登录QQ时可以在下拉框中选择自己QQ号。
实现思路:要想在指定的控件的底下实现下拉效果,首先,我们得确定要显示的起始坐标,首先得到控件的坐标,然后再由控件的坐标向下移动它本身的高度就是下拉框要显示的位置,得到显示位置就好办了。。在坐标的位置显示一个PopupWindow,布局文件为一个ListView就可以了,宽度为上面控件的宽度,高度就不用管了。代码只供参考:
?
/** * @Author: hilary * @Date: 2011-9-14 **/public class PullDownList { private PopupWindow selectPopupWindow= null; private View parentView = null; private Activity activity = null; private ListView listView = null; private PullDownListAdapter pullListAdapter = null; private DeleteData deleteData = null; ArrayList<HashMap<String, Object>> data = null; private int[] location = new int[2]; private int height; private int width; /** * * @param _activity 调用此方法的Activity * @param _parentView 用来显示的PopupWindow的View * @param _ShowlocationView 基于那个控件显示 * @param _data 数据源 */ public PullDownList(Activity _activity, View _parentView, View _ShowlocationView, ArrayList<HashMap<String, Object>> _data){ activity = _activity; parentView = _parentView; _ShowlocationView.getLocationOnScreen(location); width = _ShowlocationView.getWidth(); height = _ShowlocationView.getHeight(); data = _data; initPopuWindow(); } /** * 初始化PopupWindow */ private void initPopuWindow(){ View loginwindow = (View) activity.getLayoutInflater().inflate(R.layout.popupwindow_pull_down, null); listView = (ListView) loginwindow.findViewById(R.id.popupwindow_pulldown_list); pullListAdapter = new PullDownListAdapter(activity, data); listView.setAdapter(pullListAdapter); selectPopupWindow = new PopupWindow(loginwindow, width,LayoutParams.WRAP_CONTENT, true); selectPopupWindow.setOutsideTouchable(true); selectPopupWindow.setBackgroundDrawable(new BitmapDrawable()); // popupWindow.setAnimationStyle(R.style.MenuAnimation); listView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) { setSelected((String) data.get(arg2).get("textView")); selectPopupWindow.dismiss(); } }); } /** * 显示PopupWindow窗口 * * @param popupwindow */ public void popupWindwShowing() { selectPopupWindow.showAtLocation(parentView, Gravity.NO_GRAVITY, location[0], location[1] + height); } /** * PopupWindow消失 */ public void dismiss(){ selectPopupWindow.dismiss(); } public void setOnDeleteData(DeleteData _deleteData){ deleteData = _deleteData; } public void setOnSelected(DeleteData _deleteData){ deleteData = _deleteData; } private void setSelected(String selectedItem){ if(deleteData != null){ deleteData.selected(selectedItem); } } private void setDelete(int position){ if(deleteData != null){ deleteData.deletePosition(position); } } public interface DeleteData { public void deletePosition(int position); public void selected(String position); } class PullDownListAdapter extends BaseAdapter { private ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>(); private Activity activity = null; public PullDownListAdapter(Activity _activity, ArrayList<HashMap<String, Object>> _list) { activity = _activity; list = _list; } public int getCount() { return list.size(); } public Object getItem(int position) { return list.get(position); } public long getItemId(int position) { return position; } public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = LayoutInflater.from(activity).inflate( R.layout.pull_down_list_item, null); holder.textView = (TextView) convertView .findViewById(R.id.pull_list_item_text); holder.imageView = (ImageView) convertView .findViewById(R.id.pull_list_item_image); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.textView.setText((CharSequence) list.get(position).get("textView"));// holder.imageView.setImageDrawable((Drawable) list.get(position).get("imageView")); holder.imageView.setOnClickListener(new OnClickListener() { public void onClick(View v) { setDelete(position); removeItem(position); } }); return convertView; } class ViewHolder { TextView textView; ImageView imageView; } private void removeItem(int position){ list.remove(position); notifyDataSetChanged(); } }}?