弹出自定义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);
}
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);
}
相关文章推荐
- Android中的Menu的简介(翻译自官方文档)——————个人笔记
- 关于右键菜单实现子窗口最大化,最小化,还原和关闭的小感想
- Android PopupMenu
- Android:自定义PopupMenu的样式(显示图标/设置RadioButton图标)
- 弹出式菜单(下拉菜单)实现——PopupMenu -
- PopupWindow与PopupMenu的用法
- ActionBar的Overflow弹出菜单在ActionBar上方问题解决
- Android Menu菜单
- Android PopupMenu和PopupWindow
- Android-实现底部弹出PopupWindow并让背景逐渐变暗
- 文章标题
- android.view.WindowManager$BadTokenException:is your actvity runing?
- 带有向下箭头的自定义弹出菜单
- Android菜单使用
- android之菜单(menu)
- PopupMenu和ActionMode的使用
- PopupMenu源码分析
- Material Design新控件的使用介绍
- ToolBar 中 PopupMenu 问题
- Android之Menu解析