Диалог настраиваемого оповещения не центрирован по вертикали на Android - PullRequest
12 голосов
/ 19 июля 2010

Я создал специальное диалоговое окно с предупреждением, которое будет отображаться в конце моей игры, чтобы игрок мог ввести его имя, чтобы сохранить его. Проблема в том, что когда я вызываю show(), появляется диалоговое окно, но оно не центрировано по вертикали! Это немного ниже, чем следовало бы, и независимо от того, какие свойства я установил в xml или при использовании setGravity().

Я думаю, что это та же проблема, что и , упомянутая здесь , но никто не дал правильного ответа.

Спасибо за вашу помощь.

Для более подробной информации, вот мой код:

    AlertDialog.Builder builder;

    LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
    View layout = inflater.inflate(R.layout.newrecord,(ViewGroup)findViewById(R.layout.shoot));

    builder = new AlertDialog.Builder(this);
    builder.setView(layout);

    newRecDialog = builder.create();

А вот код первого элемента XML-макета newrecord.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:gravity="center"
 android:padding="10dp"
android:baselineAligned="true">

Вот скриншот вывода: альтернативный текст http://the.niox.free.fr/divers/dialog_offset.png

Ответы [ 10 ]

3 голосов
/ 27 сентября 2011

Ошибка описана здесь .AlertDialog резервирует пространство для панели заголовка / значка даже там, где нет ни заголовка, ни значка.

Исправление, я думаю, довольно простое: оно должно установить верхнюю панель на GONE, так жеэто делается для панели кнопок в случае отсутствия кнопок.Пока это не сделано, единственный обходной путь - реализовать собственный подкласс Dialog.

2 голосов
/ 04 июля 2013

Если вы реализуете свой собственный диалог, строка requestWindowFeature (Window.FEATURE_NO_TITLE) скрывает панель заголовка, и диалог центрируется на экране. Возможно, он работает и с AlertDialog.

2 голосов
/ 31 октября 2011

Вы можете использовать Activity вместо настраиваемого оповещения для этого. Вы должны установить тему действия в качестве диалога в файле манифеста Android:

android:theme="@android:style/Theme.Dialog"

И вы можете настроить макет активности XML в соответствии с вашими потребностями.

1 голос
/ 30 мая 2014

Android: тема = "@ андроид: стиль / Theme.Dialog"

0 голосов
/ 29 октября 2015

Вам необходимо отключить заголовок окна. Сначала создайте собственный стиль для вашего диалога (убедитесь, что используете родительскую тему, которая соответствует вашим потребностям):

<style name="CustomDialog" parent="@android:style/Theme.Dialog">
   <item name="android:windowNoTitle">true</item>
</style>

Затем примените свой стиль к построителю диалогов:

AlertDialog.Builder builder;

LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.newrecord,(ViewGroup)findViewById(R.layout.shoot));

builder = new AlertDialog.Builder( new ContextThemeWrapper(this, R.style.CustomDialog));
builder.setView(layout);

newRecDialog = builder.create();
0 голосов
/ 08 октября 2012

Попробуйте:

newRecDialog.getWindow().getAttributes().gravity = Gravity.CENTER;
0 голосов
/ 05 января 2012

вы должны использовать следующую строку в xml, сначала удалите эту строку отступа из вашего xml и после этого

android:layout_gravity="center"

после этого ваш диалог появится в центре, и если вы используете поле слева и т. Д.затем удалите его, а также, если вы используете

android:layout_width="fill_parent"

, измените его на

android:layout_width="wrap_content"

, после этого ваш диалог появится в центре.

0 голосов
/ 15 декабря 2011

Можете ли вы попробовать использовать AlertDialog.Builder.setCustomTitle(View); вместо setView? Мы используем его, потому что диалоговое окно предупреждения выглядит немного лучше, чем диалоговое окно с пустым заголовком.

0 голосов
/ 02 декабря 2010

Не совсем ответ, но у меня была похожая проблема.Похоже, что это по центру, но предполагается, что AlerterDialog имеет набор заголовков.В моем случае я просто установил заголовок.

0 голосов
/ 19 июля 2010

установите атрибут вашего AlertDialog как android:gravity="center" или программно как setGravity(Gravity.CENTER).Эта гравитация только для вашего макета, а не для отображения вашего мобильного телефона.если вы используете пользовательский заголовок, он не будет выглядеть как центральная вертикаль.

...