Android:活动的位置作为对话框

Android:活动的位置作为对话框,android,Android,我想在我的应用程序中有一个弹出对话框。对话框最好作为一个活动来完成。然后,我在清单中使用“Theme.Dialog”使活动表现为对话框。那很好 似乎不起作用的是将弹出窗口定位在我想要的位置 这是一个弹出窗口的模板,一个圆形菜单,应该位于圆形菜单的中心 按钮只是一个相对布局,在“甜甜圈”周围有六个图标 我想做的是让弹出窗口显示在屏幕上的几个圆形按钮之一。根据按下哪个按钮,我收集被按下的视图(按钮)的X/Y位置,并通过bundle将其发送到活动。然后我想使用按下按钮的位置和弹出窗口的大小来定位对话

我想在我的应用程序中有一个弹出对话框。对话框最好作为一个活动来完成。然后,我在清单中使用“Theme.Dialog”使活动表现为对话框。那很好

似乎不起作用的是将弹出窗口定位在我想要的位置

这是一个弹出窗口的模板,一个圆形菜单,应该位于圆形菜单的中心 按钮只是一个相对布局,在“甜甜圈”周围有六个图标

我想做的是让弹出窗口显示在屏幕上的几个圆形按钮之一。根据按下哪个按钮,我收集被按下的视图(按钮)的X/Y位置,并通过bundle将其发送到活动。然后我想使用按下按钮的位置和弹出窗口的大小来定位对话框,使其居中放置在按钮上方

public class WirelessDialog extends Activity {



@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    //requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.donut_dialogue);

    // get the layout of the dialog
    RelativeLayout rl = (RelativeLayout)findViewById(R.id.donut_layout);

    // get base image all other icons reside on and compute its haLf-width/height
    ImageView iv = (ImageView)findViewById(R.id.donut);
    int half_width = iv.getWidth() / 2 ;
    int half_height = iv.getHeight() / 2;


    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        int startX = extras.getInt("X");
        int startY = extras.getInt("Y");
        int endX = extras.getInt("XE");
        int endY = extras.getInt("YE");

        WindowManager.LayoutParams winParms = getWindow().getAttributes() ;
        int x = winParms.x;
        int y = winParms.y;
        Log.d("DIALOG", "Original x/y: " + x + " " + y);
        //int width = winParms.width;
        //int height = winParms.height;

        int xc = startX + (endX - startX + 1) / 2;
        int yc = startY + (endY - startY + 1) / 2;


        // new location of the dialog should be 1/2 the width and height of the donut subtracted
        // from the center of the button that was pressed.

        winParms.x = (xc - half_width);
        winParms.y = (yc - half_height);
        Log.d("DIALOG", "New    x/y: " + winParms.x + " " + winParms.y);
        getWindow().setAttributes(winParms);
    }

}
设置布局参数只会将对话框强制到最右侧。原来是 x/y位置返回为零,但任何非零数字甚至不会将其放置在位置指示的位置

将其放置在0,0是屏幕的中心,将X/Y位置设置为负值会将其向左上方。根据文档,数学不是我所期望的

有人知道我应该做什么来正确放置这个对话框窗口吗?
一个典型的例子是1280x800屏幕平板电脑上(400470)处的按钮。

在这种情况下我该怎么办:

创建一个自定义视图类作为循环弹出窗口; 当然,如果选项相同,则在活动初始化时实例化此视图; 在按钮单击侦听器上,获取其X、Y、宽度和高度,您的X和Y位置将为buttonX+(buttonWidth/2),buttonY+(buttonHeight/2); 添加此视图并将其放置在此X和Y位置

为了更快更“便宜”,您的视图可以在创建活动时实例化,并且是不可见的(在视图布局根元素中为android:visible=“none”)

我认为您的活动根布局必须是RelativeLayout或FrameLayout


我认为这个解决方案应该有效。

是的,自定义视图类可能有效,但使用活动作为对话框也应该有效。