`
hilary3113
  • 浏览: 265940 次
  • 性别: Icon_minigender_1
  • 来自: 邯郸
社区版块
存档分类
最新评论

android 下拉菜单

阅读更多

在指定的控件底下实现下拉框,就像登录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();
		}
	}
}

 

0
0
分享到:
评论

相关推荐

    Android 下拉菜单

    下面我们将深入探讨Android下拉菜单(Spinner)的使用、配置以及相关知识点。 1. **Spinner的使用**: - 在布局文件中添加Spinner元素,通过`&lt;Spinner&gt;`标签定义。例如: ```xml android:id="@+id/my_spinner...

    Android下拉菜单控件

    本文将深入探讨Android下拉菜单控件的封装类及其相关知识点。 首先,Android中的下拉菜单主要由两种组件实现:Spinner和PopupMenu。Spinner是Android SDK内置的一种控件,它可以直接在布局文件中声明,也可以在代码...

    Android 下拉菜单 美团

    在Android应用开发中,...综上所述,创建一个具有美团风格并带有过滤功能的Android下拉菜单,需要对Spinner组件有深入理解,以及熟练运用Adapter和事件监听机制。同时,注重用户体验的优化,将使你的应用更加吸引用户。

    Android menu下拉菜单

    创建Android下拉菜单通常涉及以下步骤: 1. **布局文件**:在XML布局文件中添加`Spinner`控件。例如: ```xml android:id="@+id/drop_down_menu" android:layout_width="wrap_content" android:layout_height=...

    android 下拉菜单的模板

    在Android开发中,下拉菜单(Spinner)是一个常见的UI组件,它允许用户从一组预定义的选项中选择一个。在本教程中,我们将深入探讨如何创建和使用Android的Spinner,并通过"SpinnerExample"这个示例项目来学习相关...

    Android下拉菜单

    下面我们将深入探讨Android下拉菜单——DropMenu的实现方法、特性以及相关的编程知识点。 一、Spinner控件介绍 Spinner是Android SDK中提供的一种标准UI组件,它可以嵌入到布局中,用户点击后会展示一个下拉列表,...

    android下拉菜单例子

    在Android开发中,下拉菜单(Spinner)是一种常见的UI组件,它允许用户从一组预定义的选项中选择一个。在Android应用中,下拉菜单通常用于节省屏幕空间,因为它们只在用户点击时才会显示完整的选项列表。接下来,...

    android studio,demo,Spinner下拉菜单多选的实现

    在Android开发中,Spinner是一个非常常见的控件,它通常用于展示一个下拉列表供用户选择。本教程将详细讲解如何在Android Studio 3.0.1环境下实现Spinner的多选功能,这对于创建交互式用户界面非常有用。 首先,...

    android 下拉菜单Spinner 几种使用

    在Android开发中,Spinner是一个...通过设置Adapter、监听事件以及自定义样式,我们可以根据项目需求定制出满足用户体验的下拉菜单。在实际开发中,结合`spinnerDemo`这样的示例,开发者可以更好地理解和运用Spinner。

    Android13 下拉菜单栏中添加快捷截图按钮.patch

    Android 13 原生系统下拉状态栏中是没有快捷截图按钮,现在需要添加快捷截图功能。 涉及修改的文件如下: modified: vendor/mediatek/proprietary/packages/apps/SystemUI/res/values/config.xml modified: vendor/...

    android下拉菜单——选择星座

    在Android开发中,下拉菜单通常用于实现用户交互,提供一种简洁的方式让用户在多个选项中进行选择。在本示例中,我们关注的是一个特定的应用场景:创建一个下拉菜单来选择星座。这个功能可能应用于各种应用,如星座...

    Android自定义下拉菜单示例

    本示例完整实现了自定义下拉菜单的功能,初学者可快速掌握自定义下拉菜单的技巧,有关具体的实现细节请参考博文:http://blog.csdn.net/l1028386804/article/details/48101651

    Andorid 下拉菜单源码

    总结来说,创建Android下拉菜单涉及的主要知识点有:使用PopupMenu类,菜单资源XML的定义,设置菜单项监听器以及在点击事件中展示菜单。通过理解和实践这些步骤,你可以轻松地在自己的应用中实现类似的交互功能。

    android下拉菜单

    在Android开发中,下拉菜单通常指的是Spinner控件或者AlertDialog结合ListView实现的交互式选择组件。这类组件在用户界面设计中扮演着重要角色,提供了一种简洁的方式供用户从预设选项中进行选择。下面我们将深入...

    Android仿大众点评、美团下拉菜单

    在Android应用开发中,下拉菜单(Dropdown Menu)是一种常见的用户界面元素,它允许用户从一组选项中选择一个。在大众点评和美团等应用程序中,下拉菜单通常用于展示分类、筛选条件等,提供便捷的操作体验。本项目是...

    android 简单粗暴的下拉菜单

    在Android开发中,创建一个简单粗暴的下拉菜单是一个常见的需求,这通常涉及到用户界面交互和自定义视图的设计。下面将详细讲解如何在Android中实现这样的功能。 首先,我们要明白Android中的下拉菜单主要指的是...

    Android实现上下文菜单、下拉菜单、选项菜单代码

    Android 实现上下文菜单、下拉菜单、选项菜单代码详解 Android 中的菜单系统是一个非常重要的组件,它提供了多种方式来帮助用户与应用程序进行交互。在本文档中,我们将详细介绍如何实现上下文菜单、下拉菜单和选项...

Global site tag (gtag.js) - Google Analytics