package net.oschina.gitapp.widget; import java.util.List; import net.oschina.gitapp.R; import net.oschina.gitapp.bean.MoreMenuItem; import android.app.Activity; import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.ImageView; import android.widget.PopupWindow; import android.widget.TextView; /** * 弹出菜单 说明:所有的的DropDownMenu的根的ID都需要时set_up(用于设置在menu外点击关闭) * * @created 2014-08-01 * @author 火蚁(http://my.oschina.net/LittleDY) * */ public class DropDownMenu extends PopupWindow { private ViewGroup menuView; private OnClickListener itemClickListener; private LayoutInflater inflater; public DropDownMenu(final Activity context, OnClickListener itemClickListener) { super(context); this.itemClickListener = itemClickListener; this.inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); menuView = (ViewGroup) inflater.inflate(R.layout.more_menu_container, null); this.setContentView(menuView); this.setWidth(LayoutParams.WRAP_CONTENT); this.setHeight(LayoutParams.WRAP_CONTENT); this.setFocusable(true); ColorDrawable dw = new ColorDrawable(0000000000); this.getContentView().setPadding(0, 0, 25, 0); this.setBackgroundDrawable(dw); menuView.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // 所有的的DropDownMenu的根的ID都需要时set_up int height = menuView.findViewById(R.id.set_pop).getTop(); int y = (int) event.getY(); if (event.getAction() == MotionEvent.ACTION_UP) { if (y < height) { dismiss(); } } return true; } }); } public ViewGroup getViewGroup() { return this.menuView; } // 添加菜单项 private void addItem(MoreMenuItem moreMenuItem, boolean isAddLine) { View item = inflater.inflate(R.layout.more_menu_item, null); item.setId(moreMenuItem.getViewId()); ((ImageView) item.findViewById(R.id.more_menu_item_img)) .setBackgroundResource(moreMenuItem.getImgId()); ((TextView) item.findViewById(R.id.more_menu_item_text)) .setText(moreMenuItem.getText()); item.setOnClickListener(itemClickListener); menuView.addView(item); if (isAddLine) { View line = inflater .inflate(R.layout.horizontal_divider_view, null); menuView.addView(line); } } public void addItems(List<MoreMenuItem> mMoreItems) { for (int i = 0; i < mMoreItems.size(); i++) { if (this != null) { if (i != mMoreItems.size() - 1) { this.addItem(mMoreItems.get(i), true); } else { this.addItem(mMoreItems.get(i), false); } } } } }