我想创建与 Play商店相同的弹出式菜单。弹出菜单应在网格视图项的右下角打开。但如果项目位于屏幕底部,则弹出窗口应在点击它的位置上方打开。
我尝试过弹出式菜单,但它会在项目的下方或顶部打开。
category_GV.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
System.out.println("position is : " + position);
final MenuItems menuItems = (MenuItems)parent.getItemAtPosition(position);
final String default_topping_link = menuItems.getLink();
try{
topping = DefaultToppingParser.parse(new FileInputStream(default_topping_link));
for(int i=0;i<topping.size();i++){
System.out.println("topping id : " + topping.get(i));
}
}catch(Exception e){
e.printStackTrace();
}
if(position == (burger_item_AL.size()-1)){
Intent intent = new Intent(MainActivity.this,CustomiseItem.class);
intent.putExtra("default_toppings_id", base_id);
System.out.println("intent");
startActivity(intent);
} else {
PopupMenu popupMenu = new PopupMenu(MainActivity.this, view);
popupMenu.getMenuInflater().inflate(R.menu.popup_menu, popupMenu.getMenu());
popupMenu.show();
popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
....some coding
return true;
}
});
}
}
});
我在Google上浏览了许多弹出式菜单,但找不到与Play商店相同的菜单。任何人都可以建议一些解决方案吗?
弹出窗口:
在适配器类中:
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
MainActivity.p = new Point();
MainActivity.p.x = (int) event.getRawX();
MainActivity.p.y = (int) event.getRawY();
if (MainActivity.p != null){
MainActivity.position = position;
MainActivity.showPopup(context, MainActivity.p);
}
return true;
}
return false;
}
});
showpopup方法:
public static void showPopup(final Context context, Point p) {
int popupWidth = 150;
int popupHeight = 150;
// Inflate the popup_layout.xml
LinearLayout viewGroup = (LinearLayout) ((Activity) context).findViewById(R.id.popup);
LayoutInflater layoutInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = layoutInflater.inflate(R.layout.popup, viewGroup);
// Creating the PopupWindow
final PopupWindow popup = new PopupWindow(context);
popup.setContentView(layout);
popup.setWidth(popupWidth);
popup.setHeight(popupHeight);
popup.setFocusable(true);
// Some offset to align the popup a bit to the right, and a bit down, relative to button's position.
int OFFSET_X = 30;
int OFFSET_Y = 30;
// Clear the default translucent background
popup.setBackgroundDrawable(new BitmapDrawable());
// Displaying the popup at the specified location, + offsets.
System.out.println("showing popup");
popup.showAtLocation(layout, Gravity.NO_GRAVITY, p.x - OFFSET_X, p.y + OFFSET_Y);
}
答案 0 :(得分:0)
您应该使用PopupWindow来模仿您感兴趣的行为。
通过此链接,您可以找到一个有趣的教程,教授如何实现这一目标。 http://mrbool.com/how-to-implement-popup-window-in-android/28285
希望它有所帮助。
答案 1 :(得分:0)
main.xml中
<?xml version="1.0" encoding="utf-8"?>
<item
android:id="@+id/spam"
android:title="Spam"/>
<item
android:id="@+id/blockuser"
android:title="Block User"/>
<item
android:id="@+id/remove"
android:title="Remove"/>
弹出菜单代码
PopupMenu popup = new PopupMenu(activity, v);
/** Adding menu items to the popumenu */
popup.getMenuInflater().inflate(R.menu.main, popup.getMenu());
popup.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.spam:
Toast.makeText(activity, "Spam clicked",
Toast.LENGTH_SHORT).show();
break;
case R.id.blockuser:
Toast.makeText(activity, " Block user clicked",
Toast.LENGTH_SHORT).show();
break;
case R.id.remove:
Toast.makeText(activity, "Remove clicked",
Toast.LENGTH_SHORT).show();
// RecentFragment rf = new RecentFragment();
// rf.onItemClick(position);
break;
default:
break;
}
return false;
}
});
popup.show();
此代码对我来说非常合适,我的要求与您在描述中提到的相同,希望它能帮助您