我希望在点击ListView
行中的三个点区域时弹出菜单。
registerForContextMenu
不能满足我的需求,因为它只能在长按ListView
行的任何区域时触发。
我想知道:
- 如何在
ListView
行中创建一个看起来像三个点的UI? - 如何在Android 2.3上实现PopupMenu?
我希望在点击ListView
行中的三个点区域时弹出菜单。
registerForContextMenu
不能满足我的需求,因为它只能在长按ListView
行的任何区域时触发。
我想知道:
ListView
行中创建一个看起来像三个点的UI?您可以使用 ImageView
显示带有 3 点的图像。
弹出菜单有两种方式:
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));
我知道可能有点晚了,你可能已经找到了解决方案,但是我刚刚看到了你的问题,这里是我的解决方案...
下面是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;
}
或者你可以在点击三个点时显示一个对话框。 PopupWindow需要确定在屏幕上的位置。 显示对话框可以识别你选择的列。
View.getLocationOnScreen()
找到视图(3个点)的位置,然后将布局参数设置为弹出窗口。 - Ketan Ahir