Kiedy pokazujemy AlertDialog na Androidzie, pokazuje się on na środku ekranu. Czy jest jakiś sposób na zmianę pozycji?
Kiedy pokazujemy AlertDialog na Androidzie, pokazuje się on na środku ekranu. Czy jest jakiś sposób na zmianę pozycji?
Odpowiedzi:
Po przeszukaniu różnych postów znalazłem rozwiązanie.
Kod znajduje się poniżej:
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();
Tutaj wartość pozycji x to piksele od lewej do prawej. Dla pozycji y wartość jest od dołu do góry.
wmlp.x = 100; //x position wmlp.y = 100;
po prostu zestaw grawitacja wmlp.gravity = Gravity.TOP | Gravity.LEFT;
jest na tyle
Jeśli na przykład chcesz przesunąć okno dialogowe postępu nieco niżej i nie ustawiać dokładnej pozycji piksela, to wystarczy:
progressDialog.getWindow().getAttributes().verticalMargin = 0.2F;
Te odpowiedzi spowodują przesunięcie pozycji AlertDialog, jednak pozycja wyświetlanego okna dialogowego będzie również zawierać wypełnienie wokół okna.
Jeśli chcesz pozbyć się tego wypełnienia (na przykład, aby umieścić okno dialogowe równo z dolną częścią ekranu), będziesz również musiał nadpisać domyślny styl AlertDialog w swoim styles.xml, aby ustawić windowBackground na null, tak jak w poniższym przykładzie :
<resources>
<!-- Example app theme - mine uses the below -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:alertDialogTheme">@style/MyDialogTheme</item>
</style>
<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
<!-- Full width -->
<item name="android:layout_width">fill_parent</item>
<!-- Null window background kills surrounding padding -->
<item name="android:windowBackground">@null</item>
<item name="android:windowNoTitle">true</item>
</style>
</resources>
Oprócz ustawienia Window.LayoutParameters zgodnie z opisem w zaakceptowanej odpowiedzi.
Specjalne pozdrowienie dla @Davida Caunta, którego odpowiedź pod adresem: usuń obramowanie, dopełnienie z okna dialogowego uzupełniło ten obraz.