2012-01-16 2 views
1

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

+0

Вы используете AlertDialog.Builder для вашего диалога ? – Josh

+0

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

ответ

1

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

<?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

надежда у получить подсказку, Гудлак

+0

Пробовал это и работает нормально, за исключением того, что я получил границу диалога, охватывающую все нарисованные выше. Я использовал советы из [этой темы] (http://stackoverflow.com/questions/1883425/android-borderless-dialog), чтобы исправить это. Спасибо за помощь! – Taras

+0

@Taras Можете ли вы разместить код? –

2

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

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

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

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

Обновление Yikes, просто попробованное выше с хорошими и плохими результатами. Во-первых, вы определенно хотите, чтобы посмотреть на примере "Пользовательский" Диалог с API демо, что делает использование:

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

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

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

Смежные вопросы