在ListView中实现以下弹出菜单的想法

3

我希望在点击ListView行中的三个点区域时弹出菜单。

enter image description here

registerForContextMenu不能满足我的需求,因为它只能在长按ListView行的任何区域时触发。

我想知道:

  1. 如何在ListView行中创建一个看起来像三个点的UI?
  2. 如何在Android 2.3上实现PopupMenu?
3个回答

4
  1. 您可以使用 ImageView 显示带有 3 点的图像。

  2. 弹出菜单有两种方式:

    a) 使用一些布局并使它们可见 / 隐藏

    b) 使用 PopupWindow

以下是 PopupWindow 的示例代码:

PopupWindow popupWindow = new PopupWindow(context);

View popUpView = View.inflate(activity, linearlayout, null);
popUpView.setBackgroundColor(Color.TRANSPARENT);
mpopup.setContentView(popUpView);
mpopup.setHeight(LayoutParams.WRAP_CONTENT);
mpopup.setWidth(LayoutParams.WRAP_CONTENT);
mpopup.setFocusable(true);
mpopup.setBackgroundDrawable(activity.getResources().getDrawable(R.drawable.transperent));
mpopup.setOutsideTouchable(true);
mpopup.setAnimationStyle(R.anim.slide_out_up);
mpopup.showAtLocation(popUpView, Gravity.TOP, activity.getResources()
            .getInteger(R.integer.log_out_popup_x), activity.getResources()
            .getInteger(R.integer.log_out_popup_y));

你如何设置浮动菜单的位置,使其出现在三个点的正下方?并且如何像Play Google一样以淡入动画显示它? - Mustafa Güven
1
@MustafaGüven 你可以使用View.getLocationOnScreen()找到视图(3个点)的位置,然后将布局参数设置为弹出窗口。 - Ketan Ahir
mpopup和这里的LinearLayout是什么? - Asif Sb

2

我知道可能有点晚了,你可能已经找到了解决方案,但是我刚刚看到了你的问题,这里是我的解决方案...

下面是Adapter类的getView方法的代码...

@Override
public View getView(int p, View convertView, ViewGroup parent)
{
    final ViewHolder holder;

    if (convertView == null)
    {
        holder = new ViewHolder();
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.d_item, null);

        holder.dHeading = (TextView) convertView.findViewById(R.id.txt);
        holder.ds = (TextView) convertView.findViewById(R.id.txt1);
        holder.options = (ImageView)convertView.findViewById(R.id.dPopupMenu);
        convertView.setTag(holder);
    }
    else
    {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.dHeading.setText(DList.get(p).getDHeading());
    holder.ds.setText(DList.get(p).getDs());

    holder.options.setOnClickListener( new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            final PopupMenu popmenu = new PopupMenu(context, holder.options);
            popmenu.getMenuInflater().inflate(R.menu.dua_popup_menu, popmenu.getMenu());

            popmenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener()
            {
                public boolean onMenuItemClick(MenuItem item)
                {
                    Toast.makeText(context, "You Clicked : " + item.getTitle(), Toast.LENGTH_SHORT).show();
                    return true;
                }
            });

            popmenu.show();
         }
     });

    return convertView;
}

如何减小弹出菜单的宽度和高度?菜单项太大了。@Abdul Rahman - Asif Sb

0

或者你可以在点击三个点时显示一个对话框。 PopupWindow需要确定在屏幕上的位置。 显示对话框可以识别你选择的列。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接