72

ho fatto un semplice AlertDialog nel mio attività:Modifica della posizione della finestra di dialogo sullo schermo Android

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

infoDialog.show(); 

Con il codice di cui sopra, i dialogo spettacoli al (circa) al centro dello schermo.

Mi chiedo, come posso personalizzare la posizione della finestra di dialogo per visualizzarla appena sotto la barra delle azioni superiore? (Esiste comunque la possibilità di modificare la gravità o qualcosa del dialogo?) E come farlo in base al mio codice ??

+0

Se ci mostri il layout xml my_dialog possiamo probabilmente aiutare a fare modifiche. –

+0

duplicato? Http: //stackoverflow.com/questions/5469005/show-alertdialog-in-any-position-of-the-screen –

+0

@ Ankit, puoi inserire il tuo commento come risposta, perché il mio problema viene risolto dopo aver controllato il tuo link –

risposta

171

Ho usato questo codice per visualizzare la finestra nella parte inferiore dello schermo:

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

Questo codice impedisce anche ad Android di oscurare lo sfondo della finestra di dialogo, se necessario. Dovresti essere in grado di modificare il parametro gravità per spostare la finestra di dialogo su

+0

Ciao, grazie. Ho impostato la gravità in alto, la finestra di dialogo si trova nella parte superiore dello schermo, ma ha anche coperto la mia barra delle azioni, vorrei la finestra di dialogo in alto ma appena sotto la barra delle azioni ... come regolare questo? –

+3

Si potrebbe provare a utilizzare i campi 'wlp.x' e' wlp.y' per impostare esplicitamente la posizione della finestra di dialogo sullo schermo. Non l'ho provato da solo, ma probabilmente dovrebbe funzionare. –

+0

Sì, wlp.x e wlp.y ​​funzionano. –

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

è possibile personalizzare voi dialogo sulla base di parametri di gravità e di layout cambiare la gravità e dei parametri di layout in base alla vostra requirenment

+0

Ciao, grazie. Ho impostato la gravità in alto, la finestra di dialogo si trova nella parte superiore dello schermo, ma ha anche coperto la mia barra delle azioni, vorrei la finestra di dialogo in alto ma appena sotto la barra delle azioni ... come regolare questo? –

+2

è possibile impostare il margine superiore del layout –

+0

''FILL_PARENT'' è obsoleto. Sono sull'API 21. Come da [Riferimento per gli sviluppatori] (https://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html) – fWd82

7

Per me, questo ha funzionato abbastanza bene dove stavo cercando di posizionare il mio dialogo da qualche parte esattamente nella parte inferiore della textview dove viene selezionato.

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

ho trovato questo frammento di codice dal codice @gypsicoder here

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

Qui il valore x della posizione è pixel da sinistra a destra. Per il valore di posizione y è dal basso verso l'alto.

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

Nuovo BottomSheetDialog:

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

dialog.show(); 
2

solo aggiungere questo al codice:

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