Как отобразить пользовательское диалоговое окно в определенной позиции?

У меня есть кнопка, нажатие которой вызывает диалоговое окно. Диалоговое окно отображается в центре. Но я хочу отобразить его чуть ниже кнопки. Как это сделать?

Я также пытался использовать всплывающее окно. Вот код

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();
         }
       });

       }

person Nevaeh    schedule 12.03.2014    source источник


Ответы (1)


Я думаю, вы можете достичь того, что ищете, используя:

API-интерфейс getLocationOnScreen() и компонент 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, чтобы использовать эту ссылку он отображал всплывающее окно в списке.

person Harshit Rathi    schedule 12.03.2014
comment
Второй код работает для меня. Но мне нужно отобразить диалоговое окно чуть ниже кнопки, нажатие которой вызывает диалоговое окно. Как это сделать? - person Nevaeh; 12.03.2014
comment
Я тоже это пробовал. Пожалуйста, смотрите обновленный вопрос. Как изменить положение окна в этом? - person Nevaeh; 12.03.2014
comment
Проверьте это rajeshandroiddeveloper.blogspot.in/2013/07/ - person Harshit Rathi; 12.03.2014
comment
Затем попробуйте вариант с гравитационным дном. Проверьте отредактированный ответ со вторым кодом. - person Harshit Rathi; 12.03.2014
comment
Можем ли мы установить его ниже определенного контроля? - person Jaimin Modi; 19.11.2015