Изменение положения окна на экране Android



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



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

infoDialog.show();


с вышеуказанным кодом, показывает в (О) в центре экрана.



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

608   7  

7 ответов:

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

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 от затемнения фона диалога, если вам это нужно. Вы должны иметь возможность изменить параметр гравитации, чтобы переместить диалоговое окно о

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

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

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

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

Я нашел этот фрагмент кода из @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-это пиксели слева направо. Для y значение позиции снизу вверх.

новая BottomSheetDialog:

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

dialog.show();

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

dialog.getWindow().setGravity(Gravity.BOTTOM);
dialog.getWindow().getAttributes().gravity = Gravity.BOTTOM;

Comments

    Ничего не найдено.