Soru Diyalog ekranının android üzerinde değiştirilmesi


Basit yaptım AlertDialog benim .. De Aktivite:

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

infoDialog.show();

Yukarıdaki kod ile diyalog Ekranın merkezinde (yaklaşık) gösterir.

Merak ediyorum, diyalog pozisyonunu en üstteki Action Çubuğun hemen altında göstermek için nasıl özelleştirebilirim? (Yerçekimi değiştirmek veya iletişim kutusunun bir şey var mı?) Ve koduma göre nasıl yapılır?


76
2018-02-27 14:52


Menşei


Eğer my_dialog xml düzeninizi gösterirseniz, muhtemelen değişiklik yapmanıza yardımcı olabiliriz. - Alan Moore
çift?stackoverflow.com/questions/5469005/... - Samir Mangroliya
@ Ankit, yorumunuzu cevap olarak koyabilirsiniz, çünkü bağlantımı kontrol ettikten sonra problemim çözülecektir. - Leem.fin


Cevaplar:


Ekranın altındaki iletişim kutusunu göstermek için bu kodu kullandım:

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

Bu kod ayrıca, ihtiyacınız varsa, iletişim kutusunun arka planını karartmasını da engeller. İlgili diyalogu hareket ettirmek için yerçekimi parametresini değiştirebilmelisiniz.


176
2018-02-27 14:59



Selam teşekkür ederim. Yer çekimini en üst seviyeye ayarlıyorum, diyalog ekranın üst kısmına çıkıyor, ama aynı zamanda eylem çubuğumu da kaplıyordu, üstteki diyaloğu ama eylem çubuğunun altında olmasını istiyorum… bunu nasıl ayarlayacağım? - Leem.fin
Kullanmayı deneyebilirsiniz wlp.x ve wlp.y iletişim kutusunun konumunu açıkça ekranda belirten alanlar. Kendim denemedim, ama muhtemelen işe yaramalı. - Aleks G
Evet, wlp.x ve wlp.y ​​çalışıyor. - Leem.fin
Karartmanın temizlenmesi benim için işe yaramadı (gerisi bir cazibe gibi çalıştı). Başka bir noktadaki karartmaya bir çözüm buldum: window.clearFlags (WindowManager.LayoutParams.FLAG_DIM_BEHIND); - Rubberduck
@AleksG da dailog merkezde tutmak loş arka plan rengini değiştirmek için bir yolu var mı? WindowIsFloating = false değerini dailo stiline ayarlamayı denedim. Ama bu dailog'u en üste hizalar! - Kshitij


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

Yerçekimi ve düzen parametrelerini temel alarak diyaloğu özelleştirebilirsiniz ihtiyacınıza göre yerçekimi ve düzen parametresini değiştirin


21
2018-02-27 14:57



Selam teşekkür ederim. Yer çekimini en üst seviyeye ayarlıyorum, diyalog ekranın üst kısmına çıkıyor, ama aynı zamanda eylem çubuğumu da kaplıyordu, üstteki diyaloğu ama eylem çubuğunun altında olmasını istiyorum… bunu nasıl ayarlayacağım? - Leem.fin
kenar boşluğunun kenarını ayarlayabilirsiniz - Ramesh Solanki
'FILL_PARENT' kullanımdan kaldırıldı. API 21'deyim. Geliştirici Referansı - fWd82
@ fWd82, bunun yerine "MATCH_PARENT" kullanın - William


Benim için bu, diyaloğumun seçildiği yerdeki metin görünümünün tam altında bir yere konumlandırmaya çalıştığım oldukça iyi çalıştı.

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

8
2018-06-30 10:57





Bu kod snippet'ini @gypsicoder kodundan buldum İşte

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

Burada x pozisyonunun değeri soldan sağa pikseldir. Y pozisyon değeri alttan üste doğrudur.


6
2018-06-11 23:00





Yeni BottomSheetDialog:

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

dialog.show();

4
2017-08-02 14:21





sadece bunu kodunuza ekleyin:

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

3
2017-10-16 07:00





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

1
2017-07-04 06:31