Android: Как создать Диалоговое окно без заголовка?

Я пытаюсь генерировать пользовательское диалоговое окно в Android. Я создаю свое Диалоговое окно как это:

dialog = new Dialog(this);
dialog.setContentView(R.layout.my_dialog);

Everythings хорошо работает за исключением заголовка Диалогового окна. Даже если я не устанавливаю заголовок диалогового окна, диалоговое всплывающее окно имеет пробел в положении диалогового окна.

Там какой-либо путь состоит в том, чтобы скрыть эту часть Диалогового окна?

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

263
задан GeneSys 5 February 2014 в 02:09
поделиться

5 ответов

Вы можете скрыть заголовок диалога, используя:

dialog.requestWindowFeature (Window.FEATURE_NO_TITLE);


Предыдущая версия этого ответа, которая слишком сложно:

Вам необходимо использовать AlertDialog . На сайте разработчика Android есть хорошее объяснение настраиваемых диалогов .

Вкратце, вы делаете это с помощью кода, подобного приведенному ниже с официального сайта. Это берет пользовательский файл Layot, раздувает его, дает ему базовый текст и значок, а затем создает его. Затем вы бы показали это с помощью alertDialog.show () .

AlertDialog.Builder builder;
AlertDialog alertDialog;

Context mContext = getApplicationContext();
LayoutInflater inflater = (LayoutInflater)
        mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.custom_dialog,
        (ViewGroup) findViewById(R.id.layout_root));

TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("Hello, this is a custom dialog!");
ImageView image = (ImageView) layout.findViewById(R.id.image);
image.setImageResource(R.drawable.android);

builder = new AlertDialog.Builder(mContext);
builder.setView(layout);
alertDialog = builder.create();

В ответ на комментарий:

Я предполагаю, что TextView с идентификатором nr находится в представлении, которое вы увеличиваете с помощью View view = inflater .... . Если это так, то вам нужно изменить всего один бит: вместо dialog.findView ... сделайте его view.findView ... . Затем, как только вы это сделаете, не забудьте использовать dialog.show () или даже builder.show (), не беспокоясь о builder.create ().

202
ответ дан 23 November 2019 в 02:29
поделиться

Добавьте в код эту строку

requestWindowFeature(Window.FEATURE_NO_TITLE);  

Или в XML используйте тему

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

XML будет лучшей реализацией, так как в версии кода строка заголовка создается, а затем удаляется, что является пустой тратой ресурсов

Хорошо, хорошая попытка, но это не работает. Я получаю: android.view.WindowManager $ BadTokenException: Невозможно добавить окно - нулевой токен не для приложения, если я хочу {{ 1}} откроется диалоговое окно.

Измените тип диалогового окна предупреждения на системное (например, TYPE_SYSTEM_OVERLAY) и посмотрите, решит ли это вашу проблему

67
ответ дан 23 November 2019 в 02:29
поделиться

Используйте так:

Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 

Это удалит любую строку заголовка из диалогового окна.

61
ответ дан 23 November 2019 в 02:29
поделиться

вы можете удалить заголовок по

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

где dialog - имя моего диалога.

38
ответ дан 23 November 2019 в 02:29
поделиться

FEATURE_NO_TITLE работает при создании диалогового окна с нуля, например:

Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

Но он не работает при создании AlertDialog (или с использованием Builder), потому что он уже отключает заголовок и использует пользовательский внутри.

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

Также это можно сделать с помощью стиля, например, в styles.xml:

<style name="FullHeightDialog" parent="android:style/Theme.Dialog">
   <item name="android:windowNoTitle">true</item>
</style>

А затем:

Dialog dialog = new Dialog(context, R.style.FullHeightDialog);
585
ответ дан 23 November 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: