Коли ми показуємо AlertDialog в android, він відображається в центрі екрана. Чи є спосіб змінити позицію?
Коли ми показуємо AlertDialog в android, він відображається в центрі екрана. Чи є спосіб змінити позицію?
Відповіді:
Після пошуку в різних посадах я знайшов рішення.
Код розміщено нижче:
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 значення позиції - знизу вгору.
wmlp.x = 100; //x position wmlp.y = 100;
вам просто набір гравітація wmlp.gravity = Gravity.TOP | Gravity.LEFT;
досить
Якщо ви, наприклад, хочете перенести діалог progress трохи вниз, а не встановити положення пікселя exakt, то цього достатньо:
progressDialog.getWindow().getAttributes().verticalMargin = 0.2F;
Ці відповіді змістять положення AlertDialog, однак положення відображеного діалогового вікна також буде включати прокладку навколо діалогового вікна.
Якщо ви хочете позбутися від цієї замітки (наприклад, розмістити діалогове вікно в нижній частині екрана), вам також потрібно буде замінити стиль AlertDialog за замовчуванням у ваших стилях.xml, щоб встановити нуль, як так :
<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>
А також встановлення параметрів Window.LayoutParameters, як описано у прийнятій відповіді.
Спеціальний вигук на @David Caunt, відповідь за яким: видалити кордон, набивання з діалогового вікна завершило цю картину.