如何在特定位置显示自定义对话框?

时间:2014-03-12 11:38:50

标签: android popupwindow dialog

我有一个按钮,其弹出一个对话框。对话框显示在中心。但我想在按钮下方显示它。如何做到这一点?

我也尝试使用弹出窗口。这是代码

private void showPopup(final Activity context, Point p)
    {
        Display display = getWindowManager().getDefaultDisplay(); 
        width = display.getWidth();  // deprecated
        height = display.getHeight();  // deprecated

        int popupWidth =width;
        int popupHeight =height;

       // Inflate the popup_layout.xml
       LinearLayout viewGroup = (LinearLayout) context.findViewById(R.id.popup);
       LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
       View layout = layoutInflater.inflate(R.layout.datepicker_popup, viewGroup);

       // Creating the PopupWindow
       final PopupWindow popup = new PopupWindow(context);
       popup.setContentView(layout);
       popup.setWidth(popupWidth+p.x);
       popup.setHeight(popupHeight+p.y);
       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 = 7;
       int OFFSET_Y = 65;

       // Clear the default translucent background
       popup.setBackgroundDrawable(new BitmapDrawable());

       // Displaying the popup at the specified location, + offsets.
       popup.showAtLocation(layout, Gravity.NO_GRAVITY, p.x + OFFSET_X, p.y + OFFSET_Y);



       // Getting a reference to Close button, and close the popup when clicked.
       Button close = (Button) layout.findViewById(R.id.close);
       close.setOnClickListener(new OnClickListener()
       {
           /* disable(content_view);*/
         @Override
         public void onClick(View v) 
         {
            popup.dismiss();
         }
       });

       }

1 个答案:

答案 0 :(得分:5)

我认为您可以通过以下方式实现您的目标:

getLocationOnScreen()api& PopUpWindow组件。

示例代码如下:

int[] location = new int[2];
counterView.getLocationOnScreen(location);
final View mView = inflater.inflate(R.layout.xxxx, null, false);
final PopupWindow popUp = new PopupWindow(mView, Width, Height, false);
popUp.setTouchable(true);
popUp.setFocusable(true);
popUp.setOutsideTouchable(true);
popUp.showAtLocation(view, Gravity.NO_GRAVITY, location[0], location[1]);

或像这样改变重力:

Dialog dlg = <code to create custom dialog>;

Window window = dlg.getWindow();
WindowManager.LayoutParams wlp = window.getAttributes();

wlp.gravity = Gravity.BOTTOM;
wlp.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND;
window.setAttributes(wlp);

或者相应地设置x y位置并移除重力。

window.getAttributes().x = 100;
window.getAttributes().y = 100;

或者您可以使用POPUPWindow在列表视图中使用此link显示的弹出窗口。