今天自定义了一个简单的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
*/

本文分享了如何在Android中自定义一个使用PopupWindow和ListView的上下文菜单。详细介绍了SHContextMenu.java的核心代码,包括PopupWindow和ListView的初始化,数据源设置,以及菜单的显示、隐藏方法和点击回调。同时提到了菜单的动画效果,如anim_popmenu_hide.xml和anim_popmenu_show.xml,以及上下文菜单项的Bean。文章最后展示了菜单的调用方式及实际效果图。
最低0.47元/天 解锁文章
1822

被折叠的 条评论
为什么被折叠?



