Pertanyaan Mengubah posisi Dialog di layar android


Saya membuat sederhana AlertDialog di dalam saya Aktivitas:

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

infoDialog.show();

Dengan kode di atas, dialog menunjukkan di (sekitar) pusat layar.

Saya bertanya-tanya, bagaimana cara menyesuaikan posisi dialog agar terlihat tepat di bawah Action Bar teratas? (Apakah ada pula untuk mengubah gravitasi atau sesuatu dari dialog?) Dan bagaimana melakukannya berdasarkan kode saya ??


75
2018-02-27 14:52


asal


Jawaban:


Saya menggunakan kode ini untuk menampilkan dialog di bagian bawah layar:

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

Kode ini juga mencegah android meredupkan latar belakang dialog, jika Anda membutuhkannya. Anda harus dapat mengubah parameter gravitasi untuk memindahkan dialog


176
2018-02-27 14:59



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

Anda dapat menyesuaikan dialog berdasarkan parameter gravitasi dan tata letak mengubah gravitasi dan parameter tata letak berdasarkan kebutuhan Anda


21
2018-02-27 14:57



Bagi saya, ini bekerja cukup baik di mana saya mencoba untuk memposisikan dialog saya di suatu tempat tepat di bagian bawah tampilan teks di mana ia dipilih.

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

7
2018-06-30 10:57



Saya menemukan cuplikan kode ini dari kode @gypsicoder sini

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

Di sini x nilai posisi adalah piksel dari kiri ke kanan. Untuk nilai posisi y adalah dari bawah ke atas.


6
2018-06-11 23:00



Baru BottomSheetDialog:

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

dialog.show();

4
2017-08-02 14:21



cukup tambahkan ini ke kode Anda:

dialog.getWindow().setGravity(Gravity.BOTTOM);

3
2017-10-16 07:00



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

1
2017-07-04 06:31