Изменение положения диалога на экране андроида - PullRequest
93 голосов
/ 27 февраля 2012

Я сделал простое AlertDialog в моей Деятельности :

View view = layoutInflater.inflate(R.layout.my_dialog, null);
AlertDialog infoDialog = new AlertDialog.Builder(MyActivity.this)
                    .setView(view)  
                    .create();

infoDialog.show();

С приведенным выше кодом диалоговое окно отображается в (приблизительно) центреэкран.

Мне интересно, как я могу настроить позицию диалога, чтобы она отображалась под верхней панелью действий?(Есть ли в любом случае изменить гравитацию или что-то в диалоге?) И как это сделать, основываясь на моем коде ??

Ответы [ 9 ]

207 голосов
/ 27 февраля 2012

Я использовал этот код, чтобы показать диалоговое окно внизу экрана:

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

Этот код также запрещает Android затемнять фон диалога, если вам это нужно. Вы должны быть в состоянии изменить параметр гравитации, чтобы переместить диалоговое окно на

23 голосов
/ 27 февраля 2012
private void showPictureialog() {
    final Dialog dialog = new Dialog(this,
            android.R.style.Theme_Translucent_NoTitleBar);

    // Setting dialogview
    Window window = dialog.getWindow();
    window.setGravity(Gravity.CENTER);

    window.setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
    dialog.setTitle(null);
    dialog.setContentView(R.layout.selectpic_dialog);
    dialog.setCancelable(true);

    dialog.show();
}

Вы можете настроить свой диалог на основе гравитации и параметры макета, изменить параметры гравитации и макета на основе вашего требования

8 голосов
/ 12 июня 2016

Я нашел этот фрагмент кода из @gypsicoder code здесь

private CharSequence[] items = {"Set as Ringtone", "Set as Alarm"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setItems(items, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int item) {

        if(item == 0) {

        } else if(item == 1) {

        } else if(item == 2) {

        }
    }
});

AlertDialog dialog = builder.create();
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
WindowManager.LayoutParams wmlp = dialog.getWindow().getAttributes();

wmlp.gravity = Gravity.TOP | Gravity.LEFT;
wmlp.x = 100;   //x position
wmlp.y = 100;   //y position

dialog.show();

Здесь значение x position - это пиксели слева направо. Для y значение позиции снизу вверх.

8 голосов
/ 30 июня 2015

Для меня это сработало очень хорошо, когда я пытался расположить свой диалог где-то точно в нижней части текстового представления, где он выделен.

public void setPosition(int yValue) {
    Window window = getWindow();
    WindowManager.LayoutParams param = window.getAttributes();
    param.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
    param.y = yValue;
    window.setAttributes(param);
    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}
6 голосов
/ 02 августа 2017

Новый BottomSheetDialog:

BottomSheetDialog dialog = new BottomSheetDialog(YourActivity.this);    
dialog.setContentView(YourView);

dialog.show();
4 голосов
/ 16 октября 2017

просто добавьте это к своему коду:

dialog.getWindow().setGravity(Gravity.BOTTOM);
1 голос
/ 04 июля 2017
dialog.getWindow().getAttributes().gravity = Gravity.BOTTOM;
0 голосов
/ 13 мая 2019

Для своей деятельности в диалоге я использовал это:

WindowManager.LayoutParams lp = this.getWindow().getAttributes();
lp.gravity = Gravity.BOTTOM;
0 голосов
/ 23 ноября 2018
        public class MyDialogFragment extends DialogFragment{
     protected void setDialogGravity(int gravity) {
                Dialog dialog = getDialog();
                if (dialog != null) {
                    Window window = dialog.getWindow();
                    if (window != null) {
                        WindowManager.LayoutParams params = window.getAttributes();
                        params.width = WindowManager.LayoutParams.MATCH_PARENT;
                        params.height = WindowManager.LayoutParams.MATCH_PARENT;
                        params.horizontalMargin = 0;
                        params.gravity = gravity;
                        params.dimAmount = 0;
                        params.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND;
                        window.setAttributes(params);
                    }
                }
            }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater,container,savedInstanceState);

        return inflater.inflate(R.layout.my_dialog, null);
    }

           @Override
            public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
                super.onViewCreated(view, savedInstanceState);
                setDialogGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
        }
    }
...