Диалог пользовательских предупреждений не центрирован по вертикали на Android

Я создал диалоговое окно настраиваемого предупреждения, которое будет отображаться в конце моей игры, чтобы игрок мог ввести его имя, чтобы сохранить его. Проблема заключается в том, когда я вызываю 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"> 

Вот выходной снимок экрана: alt text http://the.niox.free.fr/divers/dialog_offset.png

Solutions Collecting From Web of "Диалог пользовательских предупреждений не центрирован по вертикали на Android"

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

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

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

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

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

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

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

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

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

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

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

 android:layout_gravity="center" 

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

 android:layout_width="fill_parent" 

Чем изменить его с помощью

 android:layout_width="wrap_content" 

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

Пытаться:

 newRecDialog.getWindow().getAttributes().gravity = Gravity.CENTER; 

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

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