Android 如何正确获取GridView项目位置x,y

Android 如何正确获取GridView项目位置x,y,android,gridview,position,Android,Gridview,Position,我想把对话框的位置设置在它被点击的相同位置,就像这样 但我明白了 这是我的“定位代码”对话框 public void onItemClick(AdapterView<?> parent, View v, int position, long id) { float positionX = v.getX(); float positionY = v.getY(); LinearLayout container = (Line

我想把对话框的位置设置在它被点击的相同位置,就像这样

但我明白了

这是我的“定位代码”对话框

    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        float positionX = v.getX();
        float positionY = v.getY();

        LinearLayout container = (LinearLayout) gvGrid.getFocusedChild();

        dialog = new Dialog(CW_Emergency.this);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.view_pager_layout);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

        //position of popup
        WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
        params.x = (int) positionX;
        params.y = (int) positionY;

        ViewPagerAdapter adapter = new ViewPagerAdapter(container, CW_Emergency.this);
        viewPager = (ViewPager) dialog.findViewById(R.id.view_pager);

        dialog.show();



    }
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
浮动位置x=v.getX();
浮动位置y=v.getY();
LinearLayout容器=(LinearLayout)gvGrid.getFocusedChild();
dialog=新对话框(CW\U紧急情况。此);
对话框.requestWindowFeature(窗口.FEATURE\u无\u标题);
setContentView(R.layout.view\u pager\u layout);
dialog.getWindow().setBackgroundDrawable(新的ColorDrawable(android.graphics.Color.TRANSPARENT));
//弹出窗口的位置
WindowManager.LayoutParams params=dialog.getWindow().getAttributes();
参数x=(int)位置x;
参数y=(int)位置y;
ViewPagerAdapter适配器=新的ViewPagerAdapter(容器,CW_紧急情况。此);
viewPager=(viewPager)dialog.findViewById(R.id.view\u pager);
dialog.show();
}

请告诉我如何为所有屏幕大小正确定位它

您可以使用PopupWindow

 mPopupWindow = new PopupWindow(
                    customView,
                    LayoutParams.WRAP_CONTENT,
                    LayoutParams.WRAP_CONTENT
            );
并展示它

mPopupWindow.showAsDropDown(ItemInGridView, 0, -1 * ItemInGridView.getHeight(), Gravity.LEFT);

据我所知,在正确的位置显示对话框将更加方便和简单。要实现弹出菜单

  • 首先,您必须在菜单资源文件夹中创建菜单资源文件

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_option1"
      android:title="Option 1"
      />
    <item android:id="@+id/menu_option2"
      android:title="Option 2"
      />
    </menu>
    
    
    
  • 在您的onItemClick()方法中实现以下代码

    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    
    PopupMenu popup = new PopupMenu(this, v);
    // Inflate the menu from xml
    popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu());
    // Setup menu item selection
    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        public boolean onMenuItemClick(MenuItem item) {
            switch (item.getItemId()) {
            case R.id.menu_option1:
                Toast.makeText(MainActivity.this, "Option 1", Toast.LENGTH_SHORT).show();
                return true;
            case R.id.menu_option2:
                Toast.makeText(MainActivity.this, "Option 2", Toast.LENGTH_SHORT).show();
                return true;
            default:
                return false;
            }
        }
    });
    // Show the menu
    popup.show();
    
     }
    
    public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
    PopupMenu popup=新的PopupMenu(此,v);
    //从xml中展开菜单
    充气(R.menu.popup\u菜单,popup.getMenu());
    //设置菜单项选择
    setOnMenuItemClickListener(新的PopupMenu.OnMenuItemClickListener(){
    公共布尔onMenuItemClick(菜单项){
    开关(item.getItemId()){
    案例R.id.菜单选项1:
    Toast.makeText(MainActivity.this,“选项1”,Toast.LENGTH_SHORT.show();
    返回true;
    案例R.id.菜单选项2:
    Toast.makeText(MainActivity.this,“选项2”,Toast.LENGTH_SHORT.show();
    返回true;
    违约:
    返回false;
    }
    }
    });
    //显示菜单
    popup.show();
    }
    

  • 弹出菜单将显示在您要单击的视图附近。

    您尝试过没有设置对话框位置吗?是的。。它出现在屏幕中央