Я пытаюсь создать собственный диалог в Android. Я создаю свой диалог так:
dialog = new Dialog(this);
dialog.setContentView(R.layout.my_dialog);
Все работает хорошо, за исключением названия диалога. Даже если я не установлю заголовок диалога, всплывающее окно диалога будет содержать пустое место в позиции диалога.
Есть ли способ скрыть эту часть диалога?
Я пробовал это с AlertDialog, но кажется, что макет не установлен должным образом:
LayoutInflater inflater =
(LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.map_dialog, null);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(view);
// dialog = new Dialog(this);
// dialog.setContentView(R.layout.map_dialog);
dialog = builder.create();
((TextView) dialog.findViewById(R.id.nr)).setText(number);
Если я использую этот код, я получаю нулевое исключение указателя в последней строке. Диалог не является нулевым, поэтому TextView, который я пытаюсь получить, не существует.
Если я раскомментирую часть, в которой я использую конструктор диалогов, все будет хорошо, но для заголовка над моим диалоговым макетом.
Ответы:
Вы можете скрыть заголовок диалога, используя:
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
Предыдущая версия этого ответа, которая слишком сложна:
Вам нужно использовать
AlertDialog
. На сайте разработчика Android есть хорошее объяснение о пользовательских диалогах .В кратком изложении вы делаете это с помощью кода, скопированного ниже с официального сайта. Это берет пользовательский файл layot, раздувает его, дает ему некоторый основной текст и значок, а затем создает его. Вы бы показали это тогда с
alertDialog.show()
.В ответ на комментарий:
Я предполагаю, что TextView с идентификатором
nr
находится в представлении, которым вы надуваетесьView view = inflater....
. Если это так, то вам нужно изменить только один бит: вместо того,dialog.findView...
чтобы сделать этоview.findView...
. Затем, как только вы это сделаете, не забудьте использовать dialog.show () или даже builder.show (), не удосужившись сделать builder.create ().источник
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
FEATURE_NO_TITLE работает при создании диалога с нуля, как в:
Но он не работает при создании AlertDialog (или при использовании Builder), потому что он уже отключает заголовок и использует собственный внутри.
Я посмотрел на источники SDK, и я думаю, что это не может быть обойти. Таким образом, чтобы удалить верхний интервал, единственное решение состоит в том, чтобы создать пользовательский диалог с нуля IMO, используя класс Dialog напрямую.
Также это можно сделать с помощью стиля, например, в styles.xml:
А потом:
источник
Dialog
, но созданиеAlertDialog
было намного проще. Как указано в документации :The Dialog class is the base class for dialogs, but you should avoid instantiating Dialog directly. Instead, use one of the following subclasses: <AlertDialog and others described here>
.AlertDialog
Также обрабатывает жизненный цикл вещь и нормально / отменить в простом манере.В своем коде добавьте эту строку
Или в XML используйте тему
XML будет лучшей реализацией, так как с версией кода строка заголовка создается, а затем удаляется, что является пустой тратой ресурсов.
Измените тип диалога предупреждения на системный диалог (например, TYPE_SYSTEM_OVERLAY) и посмотрите, решит ли это вашу проблему
источник
Используйте как это:
Это удалит любую строку заголовка из диалогового окна.
источник
Используйте код ниже
setcontentview
: -Примечание : Вы должны иметь вышеуказанный код в том же порядке и строке.
requestWindowFeature
должен быть перед строкой setContentView.источник
Вы можете удалить заголовок с помощью
где диалог - это имя моего диалога.
источник
В вашем коде, если вы используете
requestWindowFeature(Window.FEATURE_NO_TITLE);
, убедитесь, что он идет раньше,dialog.setContentView();
иначе это вызывает сбой приложения.источник
Я нашел Три способа сделать это>
1) Использование requestWindowFeature
2) Использование стиля (style.xml)
3) Использование темы XML в AndroidManifest.xml
источник
В свой класс Custom_Dialog.java добавьте
requestWindowFeature(Window.FEATURE_NO_TITLE)
источник
ответ оливьера сработал для меня и является лучшим решением, если вы хотите создать собственный класс Dialog. Однако меня беспокоило, что я не могу использовать класс AlertDialog. Я хотел иметь возможность использовать системный стиль AlertDialog по умолчанию. Создание пользовательского диалогового класса не будет иметь этот стиль.
Поэтому я нашел решение (взломать), которое будет работать без создания собственного класса, вы можете использовать существующие сборщики.
AlertDialog помещает представление над представлением содержимого в качестве заполнителя для заголовка. Если вы найдете вид и установите высоту 0, пространство исчезнет.
До сих пор я проверял это на 2.3 и 3.0, возможно, это работает не на всех версиях.
Вот два вспомогательных метода для этого:
Вот пример того, как это используется:
Если вы используете это с DialogFragment, переопределите метод DialogFragment
onCreateDialog
. Затем создайте и верните диалог, как в первом примере выше. Единственное изменение заключается в том, что вы должны передать false в качестве третьего параметра (show), чтобы он не вызывал show () в диалоговом окне. DialogFragment будет обрабатывать это позже.Пример:
По мере дальнейшего тестирования я обязательно обновлюсь с необходимыми дополнительными настройками.
источник
Я не знаю, актуален ли этот вопрос, но в моем случае, когда я переключился с Dialog на DialogFragment,
был не вариант, но я мог бы использовать
вместо этого с тем же результатом.
источник
setStyle(STYLE_NO_TITLE, 0);
) будет идти в метод onCreate вашего класса DialogFragment.Установите заголовок для пустой строки, используя строитель.
источник
установите атрибут "гравитация" во всем диалоге в "центр". Затем вам нужно будет переопределить эту настройку для всех дочерних компонентов в диалоге, который вы не хотите центрировать.
источник
источник
в XML используй тему
источник
Если мы просто используем диалоговое окно без
setTitle()
, тогда это сработает при удалении пробела?источник
Думаю, вы можете просто использовать это сейчас:
источник
создает диалог без заголовка
источник
источник
При использовании AlertDialog неиспользование
setTitle()
заставляет заголовок исчезатьисточник
После нескольких взломов, я получил это на работу:
источник
dialog
здесь иgetResources()
Вы можете сделать это без использования
AlertDialog
, определив новый класс, который выходит изDialog
класса следующим образом:источник
Вот что вы можете сделать,
AlertBuilder
чтобы название исчезло:источник
Использовать это
источник
dialog_custom .requestWindowFeature (Window.FEATURE_NO_TITLE);
это удалит заголовок из диалога cutsom.
Примечание: добавьте эти строки перед добавлением контента. Например,
источник