Android. Как заставить диалоговые кнопки появляться немного за пределами диалога - PullRequest
1 голос
/ 16 января 2012

Мне нужен диалог (это диалог игры), где кнопки находятся в нижних углах диалога. Не внутри диалогового окна, а скорее в самых углах (то есть часть кнопки будет находиться над диалоговым окном, а часть будет вне его).

Ответы [ 2 ]

2 голосов
/ 16 января 2012

Во-первых, насколько я знаю, вы не можете перемещать детей макета за пределы их родителей.

Я никогда не пробовал точно, что вы собираетесь, но я думаю, что это можно сделать.Хитрость заключается в том, чтобы пойти с действием с темой диалога (примеры этого можно найти на сайте разработчика или в демонстрациях API).Убедитесь, что корневой узел вашего макета имеет ширину и высоту, равную wrap_content.Ваш корневой макет должен быть RelativeLayout и не иметь ФОНА (android: background = "# 0000").

Затем добавьте другой макет к корневому узлу (возможно, будет работать FrameLayout) с настраиваемым элементом drawable для фона.(или используйте тот, который используется в диалоговом окне по умолчанию из каркаса), а ширина и высота установлены равными fill_parent или match_parent.Установите для android: padding какое-то значение dip, которое вытягивает фон из края диалогового окна.

Осталось только добавить другие элементы макета в корневой узел.FrameLayout будет нарисован ниже всего остального, а отступы создадут иллюзию границ, которые не охватывают ваш пользовательский интерфейс.

Обновление Yikes, только что пробовал выше с хорошими и плохими результатами.Во-первых, вы определенно захотите взглянуть на пример «Custom Dialog» из демонстрации API, который использует:

Создайте действие, которое использует вышеупомянутый файл макета xml, и задайте стиль для действия Theme.CustomDialog, который вы определили в xml / styles.xml.Это даст вам красный фон для вашей деятельности.Затем вы можете отредактировать файл формы fill_box, чтобы только один атрибут фона был установлен как невидимый ("# 0000").Результатом должно быть диалоговое действие без фона.

Далее я попытался взломать фон, используя свои мысли сверху.Идея должна заключаться в том, что позади других элементов пользовательского интерфейса нарисован фальшивый фон, который не охватывает их, поэтому его можно «сжать» с помощью layout_margin и не повлиять на них.Проблема здесь заключается в том, что для фонового фона необходимо установить ширину и высоту относительно других элементов пользовательского интерфейса, поэтому он как бы ДОЛЖЕН охватывать их, поэтому он может правильно измерять свою собственную ширину и высоту относительно них.

Так что я думаю, что решение могло бы заключаться в том, чтобы сделать большую часть того, что я сказал выше, за исключением того, что не пытайтесь использовать фоновые вещи.Просто используйте 9-патч для рисования фона корневого макета и уменьшите края фона, чтобы нарисовать его дальше, чем ваш контент.Вы все равно использовали бы пользовательские темы сверху с невидимой темой окна.

1 голос
/ 16 января 2012

Вот пример макета, который я попробовал:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
 >
<FrameLayout
android:orientation="vertical"
android:id="@+id/ll1" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@android:drawable/dialog_frame">
</FrameLayout>
<Button android:layout_width="wrap_content"
 android:id="@+id/button1" 
 android:layout_height="wrap_content"
 android:layout_marginTop="35dp"
 android:layout_centerHorizontal="true"
  android:text="Button"></Button>
</RelativeLayout>

вот скриншот: layout sample

надеюсь, ты поймешь намек, удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...