Подтвердить что ты не робот

Диалог пользовательских предупреждений не центрирован по вертикали на 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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

android:layout_gravity="center"

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

android:layout_width="fill_parent"

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

android:layout_width="wrap_content"

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

Ответ 9

Try:

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

Ответ 10

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

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