У меня есть простой AlertDialog, показанный так:
new AlertDialog.Builder(this)
.setTitle("Test")
.setView(R.layout.dialog_test)
.setPositiveButton("button1", null)
.show();
Вот так выглядит раскладка dialog_test:
<?xml version = "1.0" encoding = "utf-8"?>
<TextView
xmlns:android = "http://schemas.android.com/apk/res/android"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:background = "#FF0000"
android:text = "Test"/>
TextView отображается вверху области содержимого диалогового окна с дополнительным пространством под ним. Похоже, что для AlertDialog определена какая-то минимальная высота. Я хотел бы избавиться от минимальной высоты AlertDialog и обернуть высоту TextView, или я хотел бы хотя бы вертикально центрировать TextView в пространстве содержимого AlertDialog.
Я попытался настроить макет диалогового окна таким образом, чтобы высота отображалась до и после его показа, но он ничего не делает: dialog.window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT)
Я также попытался установить android:layout_height TextView на wrap_content и android:layout_gravity на center_vertical, но TextView по-прежнему остается в верхней части пространства содержимого AlertDialog. Я попытался установить android:layout_height TextView на match_parent и android:gravity на center_vertical, но высота TextView не заполняет пространство содержимого AlertDialog и, похоже, остается обернутой и остается в верхней части содержимого AlertDialog.
Я использую android.support.v7.app.AlertDialog, но также пробовал android.app.AlertDialog, и у него такая же проблема.
Итак, есть ли способ удалить минимальную высоту AlertDialog или хотя бы центрировать содержимое по вертикали, когда высота моего содержимого меньше минимальной высоты AlertDialog?
Спасибо!
ОБНОВИТЬ: просмотрев код AlertDialog, я обнаружил, что макет (customPanel), в который добавлено ваше пользовательское представление, действительно имеет минимальную высоту.
А убрать минимальную высоту можно так:
AlertDialog dialog = new AlertDialog.Builder(this)
.setView(R.layout.dialog_test)
.show();
dialog.findViewById(R.id.customPanel).setMinimumHeight(0);
// Use R.id.contentPanel if you're using setMessage() instead of setView()
Или, если вы хотите сохранить минимальную высоту, но хотите центрировать контент по вертикали, я сделал это так:
AlertDialog dialog = new AlertDialog.Builder(this)
.setView(R.layout.dialog_test)
.show();
((FrameLayaout.LayoutParams) dialog.findViewById(R.id.custom).getLayoutParams()).gravity = Gravity.CENTER_VERTICAL
я предполагаю, что диалоговое окно предупреждения создает пространство для кнопок, которые он обычно содержит.
Использование LayoutInflater ничего не дало. Если я не определяю никаких кнопок или даже заголовка, под TextView все равно остается много ненужного места.
Я имел в виду, что диалоговое окно предупреждения может создавать пространство для кнопок, даже если они не определены. Вроде как разница между View.INVISIBLE и View.GONE
Я не думаю, что это так. Я думаю, что для содержимого AlertDialog указана минимальная высота. Если я создам AlertDialog и просто установлю текст с помощью setMessage, под сообщением останется много ненужного места, если сообщение короткое. Но если я поставлю длинное сообщение, лишнего места не останется.
Обычно, если мне просто нужно проинформировать своего пользователя о «чем угодно» и мне нужен определенный «вид», я создаю собственный макет для сообщения Toast. Конечно, недостатком является то, что он исчезает сам по себе.
У меня есть настраиваемое диалоговое окно предупреждений с полосой для большого пальца (SeekBar) и кнопкой, я использовал перенос содержимого для всех. работает нормально. Конечно, есть место для заголовка и положительной кнопки, но если я уберу их, то место, которое они занимают, исчезнет.
Но достаточно ли большой у вас SeekBar по высоте? Я все еще думаю, что для содержимого AlertDialog есть минимальная высота. Я создал совершенно новый проект, и он все еще показывает ненужное место для самого простого AlertDialog: AlertDialog.Builder(this).setView(R.layout.dialog_test).show(). Изображение здесь: i.imgur.com/4YF6l3d.png




использовать inflater для надувания макета? я думаю, в этом проблема