您的位置:首页 > 产品设计 > 产品经理

弹出自定义PopupMenu并将背景变灰

2016-04-28 17:53 681 查看
1.PopMenu

import java.util.ArrayList;
import java.util.Map;

import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;

import com.centaline.framework.R;

public class PopMenu {
private ArrayList<MenuItemBean> itemList;
private Context context;
private PopupWindow popupWindow;
private ListView listView;
private OnItemClickListener listener;
private PopAdapter adapter;
private PopupWindow.OnDismissListener dismissListener;

public PopMenu(Context context) {
// TODO Auto-generated constructor stub
this.context = context;

itemList = new ArrayList<MenuItemBean>();

View view = LayoutInflater.from(context).inflate(R.layout.popmenu, null);

//设置 listview
listView = (ListView) view.findViewById(R.id.listView);
adapter = new PopAdapter();
listView.setAdapter(adapter);

popupWindow = new PopupWindow(view, context.getResources().getDimensionPixelSize(R.dimen.popmenu_width),
LayoutParams.WRAP_CONTENT);

// 这个是为了点击“返回Back”也能使其消失,并且并不会影响你的背景(很神奇的)
popupWindow.setBackgroundDrawable(new BitmapDrawable());
}

//设置菜单项点击监听器
public void setOnItemClickListener(OnItemClickListener listener) {
//this.listener = listener;
listView.setOnItemClickListener(listener);
}

//批量添加菜单项
public void addItems(ArrayList<MenuItemBean> items) {
itemList.addAll(items);
adapter.notifyDataSetChanged();

}

//单个添加菜单项
public void addItem(MenuItemBean item) {
itemList.add(item);
adapter.notifyDataSetChanged();
}

//下拉式 弹出 pop菜单 parent 右下角
public void showAsDropDown(View parent) {
popupWindow.showAsDropDown(parent, context.getResources().getDimensionPixelSize(R.dimen.popmenu_xoff),
//保证尺寸是根据屏幕像素密度来的
context.getResources().getDimensionPixelSize(R.dimen.popmenu_yoff));

// 使其聚集
popupWindow.setFocusable(true);
// 设置允许在外点击消失
popupWindow.setOutsideTouchable(true);
//刷新状态
popupWindow.update();
}

//隐藏菜单
public void dismiss() {
popupWindow.dismiss();
}

// 适配器
private final class PopAdapter extends BaseAdapter {

@Override
public int getCount() {
// TODO Auto-generated method stub
return itemList.size();
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return itemList.get(position);
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.popmenu_item, null);
holder = new ViewHolder();

convertView.setTag(holder);

holder.imageView = (ImageView) convertView.findViewById(R.id.imageView);
holder.groupItem = (TextView) convertView.findViewById(R.id.textView);

} else {
holder = (ViewHolder) convertView.getTag();
}

holder.imageView.setImageResource((itemList.get(position)).iconRes);
holder.groupItem.setText(itemList.get(position).text);

return convertView;
}

private final class ViewHolder {
ImageView imageView;
TextView groupItem;
}
}

public static class MenuItemBean {
public int iconRes;
public String text;

public MenuItemBean(int iconRes, String text) {
this.iconRes = iconRes;
this.text = text;
}
}

public void setDismissListener(PopupWindow.OnDismissListener dismissListener){
this.dismissListener = dismissListener;

popupWindow.setOnDismissListener(dismissListener);
}

}


2. 调用
final PopMenu popMenu = new PopMenu(getActivity());
backgroundAlpha(0.5f);
ArrayList<PopMenu.MenuItemBean> menus = new ArrayList<PopMenu.MenuItemBean>();

PopMenu.MenuItemBean item1 = new PopMenu.MenuItemBean(R.drawable.release_diary, "好孕日记 ");
PopMenu.MenuItemBean item2 = new PopMenu.MenuItemBean(R.drawable.release_topic, "发话题 ");
menus.add(item1);
menus.add(item2);
popMenu.addItems(menus);

popMenu.showAsDropDown(rightIcon);
popMenu.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (position == 0) {
// Toast.makeText(getActivity(), "diary", Toast.LENGTH_SHORT).show();
MobclickAgent.onEvent(getActivity(), "101");
Intent releaseIntent = new Intent(getActivity(), ReleaseDairyActivity.class);
getActivity().startActivityForResult(releaseIntent, 127);
popMenu.dismiss();

} else {
// Toast.makeText(getActivity(), "topic", Toast.LENGTH_SHORT).show();

Intent releaseIntent = new Intent(getActivity(), ReleaseTopicActivity.class);
getActivity().startActivityForResult(releaseIntent, 127);
popMenu.dismiss();
}
}
});

popMenu.setDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
backgroundAlpha(1f);
}
});

3.背景变灰

/**
* 设置添加屏幕的背景透明度
* @param bgAlpha
*/
public void backgroundAlpha(float bgAlpha)
{
WindowManager.LayoutParams lp = getActivity().getWindow().getAttributes();
lp.alpha = bgAlpha; //0.0-1.0
getActivity().getWindow().setAttributes(lp);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PopupMenu