今天自定义了一个简单的Android菜单控件。实现方式是:PopupWindow和ListView。
现在来给大家分享一下源码:
SHContextMenu.java
核心代码部分:主要是对PopupWindow和ListView的初始化,为ListView设置数据源,以及封装了菜单的显示和隐藏的方法。还有提供了菜单的点击回调。
import android.app.Activity;
import android.content.Context;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import com.eroad.ehr.R;
import com.eroad.product.bean.ContextMenuItem;
import java.util.ArrayList;
import java.util.List;
/**
* 自定义上下文菜单
* Created by MaJian on 16/4/28.
*/
public class SHContextMenu {
private Context mContext;
private List<ContextMenuItem> itemList;
private PopupWindow popupWindow;
private View contentView;
private ListView mLvMenuList;
private MenuAdapter menuAdapter;
private OnItemSelectListener onItemSelectListener;
public interface OnItemSelectListener{
void onItemSelect(int position);
}
public void setOnItemSelectListener(OnItemSelectListener onItemSelectListener){
this.onItemSelectListener = onItemSelectListener;
}
public SHContextMenu(Context mContext){
this.mContext = mContext;
itemList = new ArrayList<>();
initPopWindow();
}
/**
* 初始化popwindow菜单
*/
private void initPopWindow(){
contentView = LayoutInflater.from(mContext).inflate(R.layout.popwindow_menu, null);
popupWindow = new PopupWindow(contentView, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
popupWindow.setFocusable(true);
popupWindow.setOutsideTouchable(true);
// 这个是为了点击“返回Back”也能使其消失,并且并不会影响你的背景
popupWindow.setBackgroundDrawable(new BitmapDrawable());
popupWindow.setAnimationStyle(R.style.PopupAnimation);
mLvMenuList = (ListView) contentView.findViewById(R.id.lv_menu);
menuAdapter = new MenuAdapter();
mLvMenuList.setAdapter(menuAdapter);
mLvMenuList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (onItemSelectListener != null){
onItemSelectListener.onItemSelect(position);
}
popupWindow.dismiss();
}
});
}
/**
* 设置菜单列表数据源
* @param itemList
*/