Я пытаюсь генерировать пользовательское диалоговое окно в 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, который я пытаюсь получить, не существует.
Если я некомментирую часть, где я использую Диалогового Конструктора, все хорошо работает, но для заголовка выше моего диалогового расположения.
Вы можете скрыть заголовок диалога, используя:
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 ().
Добавьте в код эту строку
requestWindowFeature(Window.FEATURE_NO_TITLE);
Или в XML используйте тему
android:theme="@android:style/Theme.NoTitleBar"
XML будет лучшей реализацией, так как в версии кода строка заголовка создается, а затем удаляется, что является пустой тратой ресурсов
Хорошо, хорошая попытка, но это не работает. Я получаю: android.view.WindowManager $ BadTokenException: Невозможно добавить окно - нулевой токен не для приложения, если я хочу {{ 1}} откроется диалоговое окно.
Измените тип диалогового окна предупреждения на системное (например, TYPE_SYSTEM_OVERLAY) и посмотрите, решит ли это вашу проблему
Используйте так:
Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
Это удалит любую строку заголовка из диалогового окна.
вы можете удалить заголовок по
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
где dialog - имя моего диалога.
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);