Android Custom PopupWindow/Dialog

Я пытаюсь получить полностью настраиваемый диалог или PopupWindow без каких-либо элементов управления Android UI по умолчанию (название, фон, кнопки и т.д.).

Возможно ли это вообще? Я потратил часы на поиск этого, но не повезло... Кажется, это должно быть легко возможным, но я не могу его найти.

Предпочтительно, это будет за счет раздувания представления из XML, но в этот момент все, что просто работает, было бы приятным.

Спасибо.

Ответы

Ответ 1

Шаги, которые я сделал:

  • Создайте класс, расширяющий Dialog.
  • В onCreate вызовите setContentView(x, y) с x как ваш R.layout и y, являющийся R.style.popupStyle(см. ниже).
  • В ваших res/values ​​/style.xml вам необходимо переопределить стиль DialogWindow по умолчанию. Я попробовал просто создать стиль, в котором этот был его родителем, но это все еще не очистило все значения по умолчанию. Поэтому я проверил дерево Android git и получил стиль по умолчанию и просто скопировал его. Это одно:
<style name="Theme.Dialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowTitleStyle">@android:style/DialogWindowTitle</item>
    <item name="android:windowBackground">@android:drawable/panel_background</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
</style>

Вы получите несколько ошибок, просто решите их, скопировав больше материалов из официальных файлов styles.xml и themes.xml в Android. Здесь содержимое моего файла styles.xml: http://pastebin.com/RRR15YYS

Это просто дает вам белое всплывающее окно, никаких границ, ничего. Начните настройку.:)

Благодаря mbaird для того, чтобы поставить меня на правильный путь.

[edit] Мне нужно было снова найти свой собственный ответ, и я потратил, по крайней мере, десять минут на поиск официальных файлов стилей и тем для Android, так что вот они, для справок в будущем: styles.xml и themes.xml.

Ответ 2

Похоже, вы пытаетесь настроить AlertDialog. Для того, что вы хотите сделать, вам может быть лучше просто создать свой собственный класс, который расширяет Dialog, подобно тому, как вы создаете действия по написав класс, который расширяет Activity.

Вы можете установить формат XML, вызвав setContentView() внутри метода onCreate() вашего настраиваемого класса Dialog, как и в Activity.

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