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